Linux笔记之shell脚本4:条件语句

来源:互联网 发布:ubuntu 挂载vmdk 编辑:程序博客网 时间:2024/06/11 19:23

条件语句有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/bash
read -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