相关缩写:
linux学习笔记(一)_封奚泽优的博客-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130674649?spm=1001.2014.3001.5501
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
参考链接: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文件
[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