1 test
test 条件
条件为真返回 0,条件为假返回 1
[ 条件 ]
test 能够理解3种类型的表达式
1.文件测试
2.字符串比较
3.数字比较
文件测试
-f | 存在且是普通文件 |
-d | 存在且是目录 |
-h | 存在且是符号链接 |
-b | 块设备 |
-c | 字符设备 |
-e | 文件存在 |
字符串
-n STRING | 字符串长度不为零 |
-z STRING | 字符串长度为0 |
= | 判断两个字符串是否一样 |
STRING1 = STRING2 | |
!= | 判断两个字符串是否不一样 |
STRING1 != STRING2 |
数字
eq | 等于 | ne | 不等于 |
ge | 大于等于 | le | 小于等于 |
gt | 大于 | lt | 小于 |
2 if语句
流控制:
•在一个shell脚本中的命令执行顺序称作脚本的流。大多数脚本会根据一个或多个条件来改变它们的流。
•流控制命令:能让脚本的流根据条件而改变的命令称为条件流控制命令
•exit语句:退出程序的执行,并返回一个返回码,返回码为0正常退出,非0为非正常退出,例如:
•exit 0
条件判断
If代码返回0表示真,非0为假
if语句语法如下: 1
if [ $1 -eq 1 ];thenecho '等于1'
elif [ $1 -eq 2 ];thenecho '等于二'
elseecho '既不等一,也不等于二'
fi
练习(选做):
1)检测apache是否运行,如果没有运行则启动,并记录启动的时间,保存到日志中。
#!/bin/bash
systemctl stop nginx
systemctl status httpd | grep Active |awk '{print $2}'
if [ "$status" = "active" ]
thenecho "apache 是启动的 "
elsesystemctl start httpd && date >> /root/apache_start.logecho "apache 已启动"
fi
3 case
case 语句是 shell 中流控制的第二种方式,语法如下:
read -p "case" var
case $var in模式1)list1;; 模式2)list2;; 模式N)listN;;*)list*;;
esac
命令;;
表明流应该跳转到case语句的最后。
4 for循环
for i in {取值范围} # for 关键字 i 变量名 in 关键字 取值范围格式 1 2 3 4 5do # do 循环体的开始循环体done # done 循环体的结束
for循环批量创建用户
#!/bin/bash
while : #死循环
do
read -p "请设置用户前缀/数量/密码: " prefix num pass
cat <<-EOF # 打印到屏幕
用户前缀:$prefix
用户数量:$num
用户密码:$pass
EOF
read -p "是否确认创建:[Y/N]" action
if [ $action = Y ];thenecho "starting create users..." break
fi
done
for i in `seq -w $num`
douser=$prefix$iid $user &>/dev/null if [ $? -eq 0 ];thenecho "$user is already exist"elseuseradd $userecho $pass | passwd --stdin $user &>/dev/null # 用户密码设置不需要交互fi
done
5 while
while 条件 # while 关键字 条件 [ $1 -lt 10 ] ,while循环,条件为真的情况下,会循环
do循环体
done