什么是 shell
shell 也是操作系统中的一个软件,它包在 linux 内核的外面,为用户和内核之间的交互提供了一个接口。
系统中的命令用 shell 去解释,shell 接收系统回应的输出并显示其到屏幕中。
bash = GNU Bourne-Again Shell
什么是 shell 脚本
脚本是一种解释型语言
用 shell 脚本保存执行动作
用脚本判定命令的执行条件
用脚本来实现动作的批量执行
一、如何创建新 shell 脚本
vim file.sh 用 vim 编写脚本
#!/bin/bash 脚本使用的解释器,通常用幻数 "#!" 指定
chmod +x file.sh 给予可执行权限
sh /mnt/file.sh 执行脚本
二、自动添加脚本信息
在打开xx.sh脚本文件时自动出现信息
1、编辑系统配置文件
vim /etc/vimrc
2、添加内容
新建.sh脚本文件时即会显示编辑内容
3、新建xx.sh脚本文件查看
三、diff命令与patch软件
实验环境
建立文件添加内容
vim linux:
linux
vim linux1:
HXD
linux
diff
diff 命令是用来比较两个文件或目录的不同。
1、比较2个文件的内容
diff linux linux1
1a2 ##a表示添加,add;c表示更改,change;d表示删除,delete
> HXD
2、显示补丁信息、将补丁信息导入linux.path中、打补丁
diff -u linux linux1 -u以合并的方式来显示文件内容的不同
diff -u linux linux1 > linux.path
patch
安装patch服务
用于文件不同内容打补丁
yum install patch -y
给linux与linux1相比缺失的内容打补丁内容
patch linux linux.path
打补丁不覆盖原文件
patch -b linux linux.path
此时会产生linux.orig原内容文件,linux文件已被打补丁
3、目录比较 -r
四、cut命令
cut 命令多用与字符截取
cut -d 指定分隔符
cut -f 1,7|1-7 指定截取的列
cut -c 1,4|1-4 指定截取的字符位置
脚本应用一:
要求:截取ifconfig eth0的IP字符
编辑自动运行脚本文件
vim ip_show.sh
脚本内容
ifconfig eth0 | awk -F " " '/inet\>/{print $2}'
运行脚本
sh ip_show.sh
五、&&和||
命令输出正确,显示&&后面的内容;错误则显示||后面的内容。
实验内容
ip存在即up,不存在则down
ping -c1 -w1 172.25.254.108 &> /dev/null && echo 172.25.254.108 is up || echo 172.25.254.108 is down
ping -c1 -w1 172.25.254.333 &> /dev/null && echo 172.25.254.333 is up || echo 172.25.254.333 is down
六、sort和uniq
sort
多用于字符排序
sort -n 纯数字排序
sort -r 倒序
sort -u 去掉重复数字
sort -o 输出到指定文件中
sort -t 指定分隔符
sort -k 指定要排序的列
将文件里的数字倒序排列(只排列第一列数字)
将文件里的数字倒序排列(2列数字都排列)
指定冒号后的数字排列
uniq
对重复字符做相应的处理
uniq -u 显示唯一的行
uniq -d 显示重复的行
uniq -c 每行显示一次并统计重复次数
脚本应用二
要求:列出/mnt中最大的文件
编辑脚本
vim max.sh
脚本内容
ls -Sl /mnt | grep -v total | awk -F " " 'NR==1{print $9}'
运行脚本
sh max.sh
七、test命令
在执行脚本文件时,某些操作错误并不会有提示,所以需要test命令。
test 命令和 [] 等同
test "$A" == "$B" 等同 [ "$A" == "$B" ]
[ "$A" = "$B" ]
[ "$A" != "$B" ]
[ "$A" -eq "$B" ] ##相等
[ "$A" -ne "$B" ] ##不同
[ "$A" -le "$B" ] ##小于等于
[ "$A" -lt "$B" ] ##小于
[ "$A" -ge "$B" ] ##大于等于
[ "$A" -gt "$B" ] ##大于
[ "$A" -ne "$B" -a "$A" -gt "$B" ] ##a不等于b且a大于等于b
[ "$A" -ne "$B" -o "$A" -gt "$B" ] ##a不等于b或者a大于等于b
[ -z "$A" ] ##为空
[ -n "$A" ] ##不为空
[ "$A" = "$B" ]
[ -z "$A" ] ##为空
[ -n "$A" ] ##不为空
脚本应用3
内容:输入一个数字查看是否小于10
编辑脚本
vim num_check.sh
脚本内容
[ -z "$1" ]&& {
echo "Please input a number after script!!"
exit 1
}
[ "$1" -gt "0" -a "$1" -lt "10" ] && {
echo "$1 is between 1~10"
}||{
echo "$1 is not between 1~10"
}
运行脚本
sh num_check.sh
[ "file1" -ef "file2" ] ##2个文件相等 [ "file1" -nt "file2" ]: [ "file1" -ot "file2" ]:
[ -e "file" ] 文件是否存在 [ -f "file" ] 是否是普通文件 [ -L "file" ] 软链接 [ -S "file" ] 套接字 [ -b "file" ] 块设备 [ -d "file" ] 目录 [ -c "file" ] 字符设备
编辑脚本文件
vim file.sh
脚本内容
[ "$1" "/mnt/file" ] && echo yes || echo no
查看文件是否存在
查看是否是软链接
脚本应用4
要求:编写脚本检测/mnt/file是什么类型的文件
编辑脚本文件
vim file_check.sh
脚本内容
执行脚本
sh file_check.sh
八、tr命令
文件无论大小写都可以执行
编辑脚本文件
vim test.sh
脚本内容
执行脚本
sh test.sh
脚本应用5
要求:检测用户是否存在,不存在就建立
编辑脚本文件
vim user_create.sh
脚本内容
执行脚本
sh user_create.sh