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匹配。

#!/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 

你可能感兴趣的:(linux,学习,笔记)