1.练习shell中命令历史、别名特殊字符用法
1.1显示历史命令
语法格式:history[opyion][arg...]
①如果不带参数,则显示历史命令清单
②如果后面给出一个正整数m,则显示最后m行
③如果后面给出一个文件名a1,则把a1作为历史文件名
1.2定义别名
语法格式:alias[name[value]]...
1.3 shell特殊字符
1.3.1 引号
引号分为三种:单引号、双引号和倒引号
① 倒引号内的字符会被当做shell命令,会进行置换处理
② 单引号内的字符都当做普通字符处理
③ 双引号内的字符除了$、倒引号(`)、反斜线(\)、感叹号(!)外,均作为普通字符处理
1.3.2 输入/ 输出重定向符
输入重定向:
输出重定向:
2.shell命令应用练习
2.1简述以下文件的用途
① /etc/passwd:用户账户信息
② /etc/shadow:安全用户账户信息
③ /etc/group:组账户信息
④ /etc/gshadow:安全组账户信息
2.2 指出每一条命令的功能
① id 打印真实有效的用户和组ID
② id -u 仅打印有效的用户ID
③ id -u root 仅打印root用户的ID
④ id -u wt 打印wt用户的ID
2.3 观察以下命令执行结果,理解其功能
2.3.1
which 查看可执行文件的位置
whereis 查看文件的位置
locate 配合数据库查看文件位置
find 实际搜寻硬盘查询文件名称
2.3.2
grep -n -E 'root|jsj|^user*' /etc/passwd 显示目录下以root、jsj、user开头的记录
grep -n -E ' [[:digit:]] ' /etc/passwd 显示目录下数字字符记录
grep -n -E ' [[:alpha:]] ' /etc/passwd 显示目录下文字字符记录
grep -n '[0-9]\{4,\}' /etc/group 在用户组文件中查找GID 是4 位数及以上的组信息记录
2.2.3
gimp:Linux下的图形处理工具
2.3.4
2.3.5
ls -l --time-style=long-iso 按详细时间格式显示当前目录下详细信息
ls -l --time-style=long-iso -t 按详细时间从先到后排序
ls -l --time-style=long-iso -t -r 按详细时间从后到先排序
2.3.6
ls /usr/share/man 列出该目录下信息
ls /usr/share/man | grep man[1-8] 列出该目录下man1-man8的信息
ls /usr/share/man/man1 列出该目录下信息
file /usr/share/man/man1/ls.1.gz 列出目录下信息
mkdir ~/temp; cp /usr/share/man/man1/ls.1.gz ~/temp 在当前目录下创建目录并把压缩文档拷贝过去
cd ~/temp; ls 进入目录
sudo gzip -d ls.1.gz; ls 解压文件
2.3.7
统计/home目录下以d开头的记录的行数
2.3.8
sudo adduser user7 创建一个新用户
ls /home | tee users | wc -l 统计用户数量
2.4 根据要求写出相应的shell命令
2.4.1 在目录/usr/include 下搜索文件signal.h 是否存在(提示: find 命令)
2.4.2 在/usr/include 目录下的所有文件中查找包含BUFSIZ 的行,并显示所在行号。要求:屏幕上只显示查找到的结果,过滤错误信息。(提示:① 利用grep 和通配符*; ②利用错误信息重定向和特殊设备文件/dev/null)
2.4.3 在用户名密码文件/etc/passwd 中查找登录shell 为bash 的用户信息记录,并显示行号
2.4.4 从/etc/group 文件中截取第1列(组名)和第3列(组id),并按照组id号的数值大小排序。(提示:综合使用cut,管道线及sort命令)
cut中 -d选择分隔符,-f选择分割后的域
sort中-t选择分隔符,-k选择分割后的域
2.4.5 体验awk,sed用法:依次执行命令,观察执行结果
① cp /etc/apt/sources.list t1; less t1
② sed -e "s/#.*//g" t1
③ sed -e "s/#.*//g" t1 | awk '{if(length != 0) print $0}'
④ tail -5 /etc/passwd | awk -F:'{print $1}'
⑤ tail -5 /etc/group | tee t2 awk 'BRGIN{print "file t2"}{print "line" NR ":" $0} END {print "over"} t2
1.文件/etc/apt/sources.list是包管理工具 apt
所用的记录软件包仓库位置的配置文件
2.sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。
例1:删除空白行后显示
例2:删除第2行后显示
3.awk是一种编程语言,用于对文本和数据进行处理的,具有强大的文本格式化能力,利用命令awk,可以将一些文本整理成为我们想要的样子, 命令awk是逐行进行处理的。
例1:搜索/etc/passwd有root关键字的所有行
例2:统计/etc/passwd的账户人数
2.4.6 体验命令curl和wget用法
①curl:在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。
②wget:wget是Linux系统中的一个下载文件的命令工具。
3 编写与执行shell脚本
3.1 编写并执行脚本ex1.sh
方式1:bash< 脚本名
方式2:bash filename [参数]
方式3:filename
方式4:. filename
3.2 编写并执行脚本ex2.sh
方式1:bash< 脚本名
方式2:bash filename [参数]
方式3:filename
方式4:. filename
3.3 总结脚本代码中以下内容
① ex2.sh的Line3中read命令选项-n11功能:从输入中读取11个字符,读取后自动结束输入。
② ex2.sh的Line14的功能:根据上面得出的专业代号code在filename("major_code.txt")中搜索对应的行并把结果重定向到他
中。然后将t1中的内容重定向到major中当做输入。
4.总结
通过此次实验,我对Linux中的shell程序设计有了新的认识。知道了如何创建和执行shell脚本,知道了各种shell命令的功能和用法。shell命丰富多彩,将一些简单的命令拼接起来可以实现很多有趣的功能。但是我对shell命令刚刚认识,更多功能还要以后慢慢去探索。