相关缩写:
1.新建一个文件名为mybash
[root@localhost bash]# gedit mybash
编辑文件内容(#在{}里面是删除的含义,%%表示最长的word匹配。
- #!/bin/bash
- #定义temp1
- temp1="class1:x:502:stu101,stu102,stu103,stu104"
- #显示temp1
- echo $temp1
- #去掉temp1左边的class1:x:,赋值给temp2
- temp2=${temp1#*:*:}
- #显示temp2
- echo $temp2
- #去掉temp2右边的:stu101,stu102,stu103,...后赋值给gid
- gid=${temp2%%:*}
- #显示gid
- echo $gid
- #从内存释放变量temp1,temp2
- unset temp1 temp2
运行bash程序
- [root@localhost bash]# bash mybash
- class1:x:502:stu101,stu102,stu103,stu104
- 502:stu101,stu102,stu103,stu104
- 502
4.首先当前目录要有hello.c的C语言文件
[root@localhost c]# gcc -c hello.c -o hello.o
5.启动之前可能要安装一下httpd
[root@localhost ~]# systemctl start httpd
7.这个好像也没说sub之前是否存在,不管他了,编辑Makefile文件
- [root@localhost marks]# mkdir sub
- [root@localhost marks]# ls
- makefile marks1.txt marks2.txt marks3.txt sub
- [root@localhost marks]# gedit makefile
如果sub子目录没有就创建,有的话也不会报错,用cp进行备份,最后编写删除服务。
- backup:
- #创建sub子目录,如果sub存在也不报错
- mkdir -p sub
- #备份其中有更新的文件到sub目录下
- cp -u marks*.txt sub/
- clean:
- #删除sub文件夹,强制递归删除
- rm -rf sub
我显示进入sub发现他是空目录,然后再运行make文件进行备份,发现确实进行的备份,最后可以将sub子目录进行删除,当然他也没说一定要删除,所以后面也可以不需要。
- [root@localhost marks]# ls
- makefile marks1.txt marks2.txt marks3.txt sub
- [root@localhost marks]# cd sub
- [root@localhost sub]# cd ..
- [root@localhost marks]# ls
- makefile marks1.txt marks2.txt marks3.txt sub
- [root@localhost marks]# make -f makefile
- #创建sub子目录,如果sub存在也不报错
- mkdir -p sub
- #备份其中有更新的文件到sub目录下
- cp -u marks*.txt sub/
- [root@localhost marks]# cd sub
- [root@localhost sub]# ls
- marks1.txt marks2.txt marks3.txt
- [root@localhost sub]# cd ..
- [root@localhost marks]# ls
- makefile marks1.txt marks2.txt marks3.txt sub
- [root@localhost marks]# make -f makefile clean
- #删除sub文件夹,强制递归删除
- rm -rf sub
- [root@localhost marks]# ls
- makefile marks1.txt marks2.txt marks3.txt
- [root@localhost marks]#
-
参考链接:mkdir -p的用法_Christo3的博客-CSDN博客https://blog.csdn.net/weixin_41552975/article/details/122426076
8.查看所以软件包,再查询出目标的软件包
[root@localhost ~]# rpm -qa|grep ftp
9.首先你要有那个文本文件
- [root@localhost gawk]# ls
- gawkfile stu.txt
- [root@localhost gawk]# cat stu.txt
- 姓名 性别 年龄
- 黄坤 男 21
- 陈碗琴 女 19
- 梁栋 男 20
- 张双敏 女 18
然后就是编写Gawk程序,编写的过程感觉和C语言差不多,这里BEGIN是读数据前执行一次,END是读数据后执行一次,中间是读一行数据执行,这个我不知道是不是要通过第一行来判断那个是姓名,性别,年龄,我是直接就给他确定了,要注意的是这里的字符也是把他当成字符串,然后就是按格式的输出以及他的平均年龄应该是大于或等于20男生的平均年龄吧,不是总体的,这个我也没太搞清楚,如果是整体的平均年龄就需要把if语句里面的一部分移动到外面去。
- BEGIN{
- printf "年龄大于或等于20的男生为:\n"
- }
- {
- #找到年龄大于或等于20的男生
- if($3>=20 && $2=="男"){
- #累计年龄
- sumAge+=$3
- print $ 1
- count++;
- }
- }
- END{
- printf("他们的平均年龄为%.1f\n",sumAge/count)
- }
这里后面是跟着两个文件的,一个gawk文件和要遍历的目标文本文件,默认的分隔符应该是回车键,这就方便一点了。
- [root@localhost gawk]# gawk -f gawkfile stu.txt
- 年龄大于或等于20的男生为:
- 黄坤
- 梁栋
- 他们的平均年龄为20.5
16.新建和执行就和前面一样了,就是Makefile文件不一样,这里就直接显示不一样的文件了。
- backup:
- #最开始好像是没有udisk目录的
- mkdir -p /media/udisk
- #mount -tauto 命令会先检查文件系统类型,然后自动选择最合适的方式进行挂载。
- mount -tauto /dev/sda1 /media/udisk
- #在U盘上建立linux目录
- mkdir -p /media/udisk/linux
- #备份当前目录下的所有C语言代码到U盘的linux目录下
- cp *.c /media/udisk/linux/
- #卸载U盘
- umount /dev/sda1
17.这个和前面就是差不多的了,文本文件也发生了改变。
- [root@localhost gawk]# ls
- gawkfile Gawkfile per.txt stu.txt
- [root@localhost gawk]# cat per.txt
- 姓名 民族 年龄
- 黄坤 汉 21
- 陈婉琴 回 19
- 梁栋 傣 20
- 张双敏 苗 18
编辑Gawkfile,我这里是编辑好了直接显示,大家需要直接编辑,这里就是也和全面一样,可以输出结果也正确,就是感觉一点low,不知道大家有没有更好的方法。
- [root@localhost gawk]# cat Gawkfile
- BEGIN{
- printf("少数民族的学生姓名为:")
- }
- {
- if($2!="汉" && $2!="民族"){
- sumAge+=$3
- printf $1
- printf " "
- count++
- }
- }
- END{
- printf("\n他们的平均年龄为%.2f\n",sumAge/count)
- }
运行结果
- [root@localhost gawk]# gawk -f Gawkfile per.txt
- 少数民族的学生姓名为:陈婉琴 梁栋 张双敏
- 他们的平均年龄为19.00
18.这个还是挺有意思的,不过感觉就是把命令全部放在一个bash文件里面的感觉。如果这样写问题也是很大的,首先这个文件的位置就有问题,不知道是不是要通过输入指令在网络去下载
- [root@localhost bash]# cat yum
- #!/bin/bash
- #删除redhat自带的yum包
- rpm -qa|grep yum|xargs rpm -e --nodeps
- #安装
- rpm -Uvh rpm* --nodeps
- rpm -Uvh python* --nodeps
- rpm -ivh yum-*
- cd /etc/yum.repos.d
- cp /root/Downloads/CentOS7-Base-163.repo .
- #编辑配置文件
- sed -i 's#$releasever#7#g' CentOS7-Base-163.repo
- #清除yum缓存
- yum clean all
- #更新yum缓存
- yum makecache
- #测试yum
- yum update
19.这个难道是想复杂了?这里的指定的路径就是dir1/dir2/dir3,先建立指定目录树,然后cd进入发现确实有,最后返回到原来目录下删除指定目录树,发现之前可以进去的目录确实不见了。
- [root@localhost make]# cat dirMakeFile
- #建立指定目录树
- create_dirs:
- mkdir -p dir1/dir2/dir3
- #删除指定目录树
- remove_dirs:
- rm -rf dir1
- [root@localhost make]# make -f dirMakeFile
- mkdir -p dir1/dir2/dir3
- [root@localhost make]# cd ./dir1/dir2/dir3
- [root@localhost dir3]# cd ../../..
- [root@localhost make]# make -f dirMakeFile remove_dirs
- rm -rf dir1
- [root@localhost make]# cd ./dir1/dir2/dir3
- bash: cd: ./dir1/dir2/dir3: 没有那个文件或目录
20.eval 命令会执行所有的参数并将结果返回给 $(...),然后 $(...) 中的内容会被替换为 eval 命令的输出。最终形成的是一个字符串,可以赋值给变量、作为命令参数等。他说显示指定格式的乘法口诀表,这个指定格式不知道是什么意思。
- [root@localhost bash]# cat table1.sh
- #!/bin/bash
- for i in {1..9}; do
- for j in $(eval echo {1.."$i"}); do
- ((result=i*j))
- #不换行输出
- echo -n "$j*$i=$result "
- done
- #换行
- echo
- done
- [root@localhost bash]# bash table1.sh
- 1*1=1
- 1*2=2 2*2=4
- 1*3=3 2*3=6 3*3=9
- 1*4=4 2*4=8 3*4=12 4*4=16
- 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
- 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
- 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
- 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
- 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语言是函数,这里是命令,所以没有空格的话就不算一个命令了(个人理解)
- [root@localhost bash]# cat table2.sh
- for (( i=1; i<=9; i++)); do
- for (( j=1; j<=i; j++ )) do
- printf "$j*$i=%-3d" "$((j*i))"
- done
- echo
- done
- [root@localhost bash]# bash table2.sh
- 1*1=1
- 1*2=2 2*2=4
- 1*3=3 2*3=6 3*3=9
- 1*4=4 2*4=8 3*4=12 4*4=16
- 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
- 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
- 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
- 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 范围”这种。
- [root@localhost bash]# cat table3.sh
- for i in $(seq 1 9); do
- for j in $(seq 1 ${i}); do
- printf "$j*$i=%-3d" "$((j*i))"
- done
- echo
- done
- [root@localhost bash]# bash table3.sh
- 1*1=1
- 1*2=2 2*2=4
- 1*3=3 2*3=6 3*3=9
- 1*4=4 2*4=8 3*4=12 4*4=16
- 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
- 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
- 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
- 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
- 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