目录
条件判断
$?:条件判断,失败或者成功,真或者假 true false
shell脚本 :0 为真,true,执行成功。所有非0都是false 假,执行失败
条件测试命令
test格式
test 操作符 条件表达式
-e exist 测试目录或文件是否存在
-d 测试是否为目录
-f 测试是否为文件
-r 测试当前用户是否有读权限
-w 测试当前用户是否有写权限
-x 测试当前用户是否有执行权限
-z 判断括号内容是否为空
test也可以进行数值和字符串比较
字符串比较,比较的内容是否一致
常见的比较符:(以下只能用于整数比较)
- -eq 等于 ==
- -ne 不等于 ! =
- -gt 大于 >
- -lt 小于 <
- -le 小于等于 < =
- -ge 大于等于 > =
[ 条件表达式 ]
和test格式类似,但存在歧义和问题
[[ 条件表达式 ]]
双中括号的写法比]的功能更加强大。可以避免歧义的出现。而且双中括号可以支持正则表达式。双括号只支持符号连接,不支持字母连接语句。
逻辑测试命令
-
-a或者&& 逻辑与 :前后体检都要成立
-
-0或者|| 逻辑或 :前后满足一个即可
-
! 取反
条件判断语句
if语句
单分支
if [ 条件表达式 ]
then
命令序列
fi
双分支
if [ 条件表达式 ]
then
命令序列
else
命令序列
fi
-
练习
多分支
if [ 条件表达式 ]
then
命令序列
elif [ 条件表达式 ]
then
命令序列
else
命令序列
fi
case语句
case 变量 in
模式1)
命令序列
;;
模式2)
命令序列
;;
*)
命令序列
;;
esac
1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限
2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰, 如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别。 男生进男生组,女生进女生组,如果输入错误请提示错误(整数判断,小数判断。9.72 3.21 )
3.用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录 tar -zxvf
tar -jxvf
4.提示用户输入内容,使用if 语句判断输入的内容是否为整数。判断范围0-100。
5.根据上一题再判断输入的内容是奇数还是偶数。
6.用if 语句判断主机是否存活.保存到/opt/hosts.txt ping -c 5 不显示ping的过程
7.用case语句控制 firewalld start|stop|restart|status 来管理firewalld服务, 要求如果命令选项不对,则提示输入不正确: {start|stop|status|restart}”。 stop start status restart
循环语句
-
循环
-
在Shell脚本中,有三种主要的循环语句:for、while和until。这些循环语句在满足一定的条件情况下,允许重复执行命令或一组命令,以实现自动化任务。
-
循环包括:循环体以及循环条件。当循环条件满足,循环体将一直被执行,直到循环条件不满足为止。
-
循环是─种流程控制的结构。
-
遍历
-
遍历是指对—组数据结构中的每个元素进行一次访问的过程。
-
数组列表等等,会遍历其中的元素,对这些元素进行指定的操作。
遍历是对数据操作的过程,循环和遍历是结合使用的.
-
循环的好处
-
重复的执行代码,可以在程序中重复执行一段代码,避免重新编写代码。减少程序的代码量。提高程序的可读性和可维护性
-
提高整个程序的运行的效率
-
提高代码的复用率
for语句
for
循环用于在指定范围内或遍历列表中的元素执行一组命令。它通常用于已知循环次数或遍历已知元素的情况。
for 变量 in 取值范围
do
命令列表
done
-
for 1
for (( 表达式1; 表达式2; 表达式3;))
do
命令列表
done
-
for 2
双层for循环:
外循环控制整个循环的次数,而且外循环执行的是行,内循环执行的列
while
for循环和while在绝大多数情况下可以通用。
while在循环条件满足的情况才会执行,一旦条件不满足立刻停止
while [ 判断条件 ]
do
命令序列
done
-
运用
-
不知道循环次数的场景
-
需要主动结束循环的或者达到条件才会终止循环。
until
until判断条件成立时,终止循环,只有条件不成立才会进行循环。
until [ 判断条件 ]
do
命令序列
done
循环控制语句
continue:
-
跳出循环,表示满足条件时跳出循环,但是不影响后续循环的继续执行。
-
作用:在循环内部跳过本次循环并继续下一次满足条件的循环
break:
跳出循环,满足条件直接跳出循环,后续的循环条件也不再执行。
-
练习
默认的数字都是1,有几层数字为几
exit
表示整个进程全部结束。
默认数字0
生成随机数
练习
-
总练习1
淘宝购物:—家店铺,五种商品进行选择,衣服500,裤子400,鞋子350,帽子150,袜子50,吴总逛到了这家店,每次选购完之后或者进店什么都不买都提示用户,你还要接着买吗?如果不再继续购物,提示用户的消费金额,吴总,结账才能走了。
每种商品赋值
选择商品后金额累加,
循环:判断是否继续购买,继续购买提示,不继续购买提示金额。
-
总练习2
1.打印出/etc/目录下所有的文件
2.利用for循环将多个文件的内容合并为一个文件:
3.循环的ping测试整个网段的连通性(读取用户输入的网段,测试后,通的要保留到、opt/hosts.txt 而且提示用户该ip可以通,不通的也显示)
4.打印梯形
5.用户输入密码,脚本来判断密码是否正确,正确的是123456,连续输入3次报警
密码是固定的123456,用户自定义输入,3次则提示超过三次,不能再输了,循环终止。
-
总练习3
1、提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
2、用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在, 输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码; 若该用户不存在,提示用户输入密码,建立用户并设立其密码
3、实现可变菱形。
4、查找/opt/test中的所有文件,并将它们复制/opt/test1中
5、查找opt目录下的所有.txt位结尾的文件,如果存在,打印文件内容。然后把文件内容保存到/opt/new.txt中