• Linux学习笔记(二)


    根据老师发的练习题做了总结。

    相关缩写:

    linux学习笔记(一)_封奚泽优的博客-CSDN博客icon-default.png?t=N4P3https://blog.csdn.net/weixin_64066303/article/details/130674649?spm=1001.2014.3001.5501

    1.新建一个文件名为mybash

    [root@localhost bash]# gedit mybash
    

     编辑文件内容(#在{}里面是删除的含义,%%表示最长的word匹配。

    1. #!/bin/bash
    2. #定义temp1
    3. temp1="class1:x:502:stu101,stu102,stu103,stu104"
    4. #显示temp1
    5. echo $temp1
    6. #去掉temp1左边的class1:x:,赋值给temp2
    7. temp2=${temp1#*:*:}
    8. #显示temp2
    9. echo $temp2
    10. #去掉temp2右边的:stu101,stu102,stu103,...后赋值给gid
    11. gid=${temp2%%:*}
    12. #显示gid
    13. echo $gid
    14. #从内存释放变量temp1,temp2
    15. unset temp1 temp2

     运行bash程序

    1. [root@localhost bash]# bash mybash
    2. class1:x:502:stu101,stu102,stu103,stu104
    3. 502:stu101,stu102,stu103,stu104
    4. 502

    参考链接:linux shell 中 %% *的含义_shell %%_lhc_执笔画江山的博客-CSDN博客https://blog.csdn.net/qq_30130417/article/details/80911989

    4.首先当前目录要有hello.c的C语言文件

    [root@localhost c]# gcc -c hello.c -o hello.o
    

    5.启动之前可能要安装一下httpd

    [root@localhost ~]# systemctl start httpd
    

    7.这个好像也没说sub之前是否存在,不管他了,编辑Makefile文件

    1. [root@localhost marks]# mkdir sub
    2. [root@localhost marks]# ls
    3. makefile marks1.txt marks2.txt marks3.txt sub
    4. [root@localhost marks]# gedit makefile

     如果sub子目录没有就创建,有的话也不会报错,用cp进行备份,最后编写删除服务。

    1. backup:
    2. #创建sub子目录,如果sub存在也不报错
    3. mkdir -p sub
    4. #备份其中有更新的文件到sub目录下
    5. cp -u marks*.txt sub/
    6. clean:
    7. #删除sub文件夹,强制递归删除
    8. rm -rf sub

     我显示进入sub发现他是空目录,然后再运行make文件进行备份,发现确实进行的备份,最后可以将sub子目录进行删除,当然他也没说一定要删除,所以后面也可以不需要。

    1. [root@localhost marks]# ls
    2. makefile marks1.txt marks2.txt marks3.txt sub
    3. [root@localhost marks]# cd sub
    4. [root@localhost sub]# cd ..
    5. [root@localhost marks]# ls
    6. makefile marks1.txt marks2.txt marks3.txt sub
    7. [root@localhost marks]# make -f makefile
    8. #创建sub子目录,如果sub存在也不报错
    9. mkdir -p sub
    10. #备份其中有更新的文件到sub目录下
    11. cp -u marks*.txt sub/
    12. [root@localhost marks]# cd sub
    13. [root@localhost sub]# ls
    14. marks1.txt marks2.txt marks3.txt
    15. [root@localhost sub]# cd ..
    16. [root@localhost marks]# ls
    17. makefile marks1.txt marks2.txt marks3.txt sub
    18. [root@localhost marks]# make -f makefile clean
    19. #删除sub文件夹,强制递归删除
    20. rm -rf sub
    21. [root@localhost marks]# ls
    22. makefile marks1.txt marks2.txt marks3.txt
    23. [root@localhost marks]#

    参考链接:mkdir -p的用法_Christo3的博客-CSDN博客https://blog.csdn.net/weixin_41552975/article/details/122426076

    8.查看所以软件包,再查询出目标的软件包

    [root@localhost ~]# rpm -qa|grep ftp
    

    9.首先你要有那个文本文件

    1. [root@localhost gawk]# ls
    2. gawkfile stu.txt
    3. [root@localhost gawk]# cat stu.txt
    4. 姓名 性别 年龄
    5. 黄坤 男 21
    6. 陈碗琴 女 19
    7. 梁栋 男 20
    8. 张双敏 女 18

    然后就是编写Gawk程序,编写的过程感觉和C语言差不多,这里BEGIN是读数据前执行一次,END是读数据后执行一次,中间是读一行数据执行,这个我不知道是不是要通过第一行来判断那个是姓名,性别,年龄,我是直接就给他确定了,要注意的是这里的字符也是把他当成字符串,然后就是按格式的输出以及他的平均年龄应该是大于或等于20男生的平均年龄吧,不是总体的,这个我也没太搞清楚,如果是整体的平均年龄就需要把if语句里面的一部分移动到外面去。

    1. BEGIN{
    2. printf "年龄大于或等于20的男生为:\n"
    3. }
    4. {
    5. #找到年龄大于或等于20的男生
    6. if($3>=20 && $2=="男"){
    7. #累计年龄
    8. sumAge+=$3
    9. print $ 1
    10. count++;
    11. }
    12. }
    13. END{
    14. printf("他们的平均年龄为%.1f\n",sumAge/count)
    15. }

     这里后面是跟着两个文件的,一个gawk文件和要遍历的目标文本文件,默认的分隔符应该是回车键,这就方便一点了。

    1. [root@localhost gawk]# gawk -f gawkfile stu.txt
    2. 年龄大于或等于20的男生为:
    3. 黄坤
    4. 梁栋
    5. 他们的平均年龄为20.5

    16.新建和执行就和前面一样了,就是Makefile文件不一样,这里就直接显示不一样的文件了。

    1. backup:
    2. #最开始好像是没有udisk目录的
    3. mkdir -p /media/udisk
    4. #mount -tauto 命令会先检查文件系统类型,然后自动选择最合适的方式进行挂载。
    5. mount -tauto /dev/sda1 /media/udisk
    6. #在U盘上建立linux目录
    7. mkdir -p /media/udisk/linux
    8. #备份当前目录下的所有C语言代码到U盘的linux目录下
    9. cp *.c /media/udisk/linux/
    10. #卸载U盘
    11. umount /dev/sda1

    17.这个和前面就是差不多的了,文本文件也发生了改变。

    1. [root@localhost gawk]# ls
    2. gawkfile Gawkfile per.txt stu.txt
    3. [root@localhost gawk]# cat per.txt
    4. 姓名 民族 年龄
    5. 黄坤 汉 21
    6. 陈婉琴 回 19
    7. 梁栋 傣 20
    8. 张双敏 苗 18

    编辑Gawkfile,我这里是编辑好了直接显示,大家需要直接编辑,这里就是也和全面一样,可以输出结果也正确,就是感觉一点low,不知道大家有没有更好的方法。

    1. [root@localhost gawk]# cat Gawkfile
    2. BEGIN{
    3. printf("少数民族的学生姓名为:")
    4. }
    5. {
    6. if($2!="汉" && $2!="民族"){
    7. sumAge+=$3
    8. printf $1
    9. printf " "
    10. count++
    11. }
    12. }
    13. END{
    14. printf("\n他们的平均年龄为%.2f\n",sumAge/count)
    15. }

     运行结果

    1. [root@localhost gawk]# gawk -f Gawkfile per.txt
    2. 少数民族的学生姓名为:陈婉琴 梁栋 张双敏
    3. 他们的平均年龄为19.00

    18.这个还是挺有意思的,不过感觉就是把命令全部放在一个bash文件里面的感觉。如果这样写问题也是很大的,首先这个文件的位置就有问题,不知道是不是要通过输入指令在网络去下载

    1. [root@localhost bash]# cat yum
    2. #!/bin/bash
    3. #删除redhat自带的yum包
    4. rpm -qa|grep yum|xargs rpm -e --nodeps
    5. #安装
    6. rpm -Uvh rpm* --nodeps
    7. rpm -Uvh python* --nodeps
    8. rpm -ivh yum-*
    9. cd /etc/yum.repos.d
    10. cp /root/Downloads/CentOS7-Base-163.repo .
    11. #编辑配置文件
    12. sed -i 's#$releasever#7#g' CentOS7-Base-163.repo
    13. #清除yum缓存
    14. yum clean all
    15. #更新yum缓存
    16. yum makecache
    17. #测试yum
    18. yum update

    19.这个难道是想复杂了?这里的指定的路径就是dir1/dir2/dir3,先建立指定目录树,然后cd进入发现确实有,最后返回到原来目录下删除指定目录树,发现之前可以进去的目录确实不见了。

    1. [root@localhost make]# cat dirMakeFile
    2. #建立指定目录树
    3. create_dirs:
    4. mkdir -p dir1/dir2/dir3
    5. #删除指定目录树
    6. remove_dirs:
    7. rm -rf dir1
    8. [root@localhost make]# make -f dirMakeFile
    9. mkdir -p dir1/dir2/dir3
    10. [root@localhost make]# cd ./dir1/dir2/dir3
    11. [root@localhost dir3]# cd ../../..
    12. [root@localhost make]# make -f dirMakeFile remove_dirs
    13. rm -rf dir1
    14. [root@localhost make]# cd ./dir1/dir2/dir3
    15. bash: cd: ./dir1/dir2/dir3: 没有那个文件或目录

    20.eval 命令会执行所有的参数并将结果返回给 $(...),然后 $(...) 中的内容会被替换为 eval 命令的输出。最终形成的是一个字符串,可以赋值给变量、作为命令参数等。他说显示指定格式的乘法口诀表,这个指定格式不知道是什么意思。

    1. [root@localhost bash]# cat table1.sh
    2. #!/bin/bash
    3. for i in {1..9}; do
    4. for j in $(eval echo {1.."$i"}); do
    5. ((result=i*j))
    6. #不换行输出
    7. echo -n "$j*$i=$result "
    8. done
    9. #换行
    10. echo
    11. done
    12. [root@localhost bash]# bash table1.sh
    13. 1*1=1
    14. 1*2=2 2*2=4
    15. 1*3=3 2*3=6 3*3=9
    16. 1*4=4 2*4=8 3*4=12 4*4=16
    17. 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
    18. 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
    19. 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
    20. 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
    21. 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

     这个虽然感觉整体和C语言一样,但还是有区别的,要注意空格,C语言是函数,这里是命令,所以没有空格的话就不算一个命令了(个人理解

    1. [root@localhost bash]# cat table2.sh
    2. for (( i=1; i<=9; i++)); do
    3. for (( j=1; j<=i; j++ )) do
    4. printf "$j*$i=%-3d" "$((j*i))"
    5. done
    6. echo
    7. done
    8. [root@localhost bash]# bash table2.sh
    9. 1*1=1
    10. 1*2=2 2*2=4
    11. 1*3=3 2*3=6 3*3=9
    12. 1*4=4 2*4=8 3*4=12 4*4=16
    13. 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
    14. 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
    15. 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
    16. 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64

     seq 是 Bash shell 中的一个命令,用于生成一个指定范围内的连续数字序列,和前面那种意思就差不多了,都是“for i in 范围”这种。

    1. [root@localhost bash]# cat table3.sh
    2. for i in $(seq 1 9); do
    3. for j in $(seq 1 ${i}); do
    4. printf "$j*$i=%-3d" "$((j*i))"
    5. done
    6. echo
    7. done
    8. [root@localhost bash]# bash table3.sh
    9. 1*1=1
    10. 1*2=2 2*2=4
    11. 1*3=3 2*3=6 3*3=9
    12. 1*4=4 2*4=8 3*4=12 4*4=16
    13. 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
    14. 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
    15. 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
    16. 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
    17. 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

  • 相关阅读:
    SLAM从入门到精通(车道线检测)
    公众号迁移公证线上怎么办?
    一文搞懂可重入和线程安全
    C++:扫描线算法​(附完整源码)
    地震数据处理研究(Matlab代码实现)
    2022年,计算机视觉最常用的Python库
    数据结构——红黑树
    MySQL笔记 合并查询 外连接 约束
    Spring-依赖注入DI
    【Qt控件之QLabel】用法及技巧
  • 原文地址:https://blog.csdn.net/weixin_64066303/article/details/131136250