Shell 分支语句
单分支if
语法:
if 条件测试; then
命令序列
fi
注:
条件测试
可以是判断语句也可以是任何有返回值的命令(执行成功—返回0—假)
实例:
-
输入用户名和密码新建用户
#!/bin/bash read -p "请输入用户名:" user read -p "请输入密码:" pass if [[ ! -z "$user" && ! -z "$pass" ]]; then useradd "$user" echo "$pass" | passwd --stdin "$user" fi
-
脚本自动测试
#!/bin/bash if ! mkdir "/media/cdrom"; then echo "failed to create cdrom directory" fi if ! yum -y -q install ABC; then echo "failed to install ABC" fi
-
判断服务状态:启动、关闭、自启动
#!/bin/bash if [ -z $1 ]; then echo "错误:未输入服务名称" echo "用法:脚本名 服务名" exit #退出脚本 fi if systemctl is-active $1 &>/dev/null ; then echo "$1 已经启动" else echo "$1 未启动" fi if systemctl is-enabled $1 &>/dev/null ; then echo "$1 是开机自动启动" else echo "$1不是开机自动启动" fi
-
配置VNC远程桌面访问服务端
#!/bin/bash rpm --quiet -q tigervnc-server #检查是否安装tigervnc-server if [[ $? -ne 0 ]]; then yum -y install tigervnc-server fi x0vncserver AcceptKeyEvents=0 AcceptPointerEvents=0 \ AlwaysShared=1 SecurityTypes=None rfbport=5908
AcceptPointerEvents:是否接受鼠标控制;0——禁止,1——允许
AcceptKeyEvents:是否接受键盘控制;0——禁止,1——允许
AlwaysShared:是否支持多人共享;0——禁止,1——支持
SecurityType:是否需要输入密码;None——不需要,VncAuth——需要
rfbport:远程桌面连接端口
客户端:
yum -y install tigervnc vncviewer server_ip:5908
双分支if
语法:
if 条件测试; then
命令序列1
else
命令序列2
fi
实例:
-
判断主机是否可以ping通
#!/bin/bash if [[ -z "$1" ]]; then echo -n "用法: 脚本" echo -e "\033[32m 域名或IP\033[0m" exit fi ping -c2 -i0.1 -W1 "$1" &>/dev/null if [[ $? -eq 0 ]]; then echo "$1 is up" else echo "$1 is down" fi
多分支if
语法:
if 条件测试1; then
命令序列1
elif 条件测试2; then
命令序列2
elif 条件测试3; then
命令序列3
…
else
命令序列n
fi
实例:
-
猜数游戏
#!/bin/bash clear num=$[RANDOM%10+1] read -p "请输入1~10之间的整数:" guess if [[ ${guess} -eq ${num} ]]; then echo "恭喜,猜对了!" elif [[ ${guess} -lt ${num} ]]; then echo "Oops, 猜小了" else echo "Oops, 猜大了" fi
多分支case
语法:
case value in
模式1|模式2|模式3)
命令序列1;;
模式4|模式5|模式6)
命令序列1;;
…
*)
命令序列n;;
esac
实例:
-
字母比较
#!/bin/bash read -p "请输入一个a~c之间的字母:" key case $key in a) echo "I am a.";; b) echo "I am b.";; c) echo "I am c.";;
-
通配符
符号 描述 * 匹配任意字符串 ? 匹配任意单个字符 […] 匹配括号中任意单个字符 #!/bin/bash read -p "请输入任意字符:" key case $key in [a-z]) echo "小写字母";; [A-Z]) echo "大写字母";; [0-9]) echo "数字";;