条件语句有if,for,while,switch
PART 1:if语句
(if...then...fi)
编写一脚本:如果目录不存在,创建目录
#!/bin/bash
DIR="/root/Desktop/ddd"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
(if...then...else...fi)
编写一脚本:ping一ip地址,根据ping的结果输出(ping的-c代表发送数据包数量为3,-i代表隔0.2秒发数据包,-W代表超3秒视为超时,$1是用户输入的第一个参数,即ip地址)
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is up"
else
echo "Host $1 is down"
fi
(if...then...elif...then...else...fi)
写一个判定成绩的脚本:read -p 表示输入一个值到变量里
#!/bin/bash
read -p "Input your score (0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ];then
echo "$GRADE is Excellent!"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ];then
echo "$GRADE is Pass.."
else echo "$GRADE is Fail"
fi
PART 2:for语句
(for...in...do...done)
创建一份用户名单在user_list.txt:
okaka
longly
songyan
koka
shimaburo
john
laka
用for循环新建用户,并赋予密码
#!/bin/bashread -p "Enter The Users Password:" PASSWD
for UNAME in `cat user_list.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME Already exists"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME Create success"
else
echo "$UNAME Create failure"
fi
fi
done
新增后可以在这里看用户:
[root@okaka Desktop]# tail -6 /etc/passwd
longly:x:1002:1002::/home/longly:/bin/bash
songyan:x:1003:1003::/home/songyan:/bin/bash
koka:x:1004:1004::/home/koka:/bin/bash
shimaburo:x:1005:1005::/home/shimaburo:/bin/bash
john:x:1006:1006::/home/john:/bin/bash
laka:x:1007:1007::/home/laka:/bin/bash
提示:
&> /dev/null 表示把输出重定向到一个无效的区域,作用是不把结果显示在屏幕上
id命令可以显示真实有效的用户 ID(UID) 和组 ID(GID),这里的作用是辨别是否有该用户存在
passwd命令用于修改用户密码, --stdin选项是指允许用标准输入修改用户密码
再弄多一个例子:
有ip_list内容如下:
127.0.0.1
192.168.10.10
192.168.10.11
192.168.31.170
现在写一脚本来检验哪些ip是可以ping通的:
#!/bin/bash
IPLIST=$(cat /root/Desktop/ip_list.txt)
for IP in $IPLIST
do
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ];then
echo "Host $IP is up"
else
echo "Host $IP is down"
fi
done
结果如下
[root@okaka Desktop]# ./for_test_2.sh
Host 127.0.0.1 is up
Host 192.168.10.10 is down
Host 192.168.10.11 is down
Host 192.168.31.170 is down
提示:
上面两个例子中我发现`cat user_list.txt`和$(cat /root/Desktop/ip_list.txt)都是可行的,而且作用也一样,是用来执行里面的语句的
PART 3:while语句
(while...do...done),中间可以加exit 0来跳出循环
编写一个猜价格的游戏:
PRICE=$(expr $RANDOM % 1000)TIMES=0
echo "the price of commodity is $PRICE,how much is it?"
while true
do
read -p "input your price:" GUESS
let TIMES++
if [ $GUESS -eq $PRICE ];then
echo "OK!you are right!!HaHa"
echo "you've guessed it $TIMES times"
exit 0
elif [ $GUESS -gt $PRICE ];then
echo "It is too high"
else
echo "It is too low"
fi
done
提示:
expr用来求表达式的值,上面也可以写成PRICE=`expr $RANDOM % 1000`
let用来方便为变量赋值,且不需要加上$
PART 4:case语句
(case [模式1])...;;[模式2])...;;...*)...esac)#!/bin/bash
read -p "please input a key and press Enter:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "char"
;;
[0-9])
echo "num"
;;
*)
echo "else key"
esac
[root@okaka Desktop]# sh case_test.sh
please input a key and press Enter:r
char
[root@okaka Desktop]# sh case_test.sh
please input a key and press Enter:1
num