shell脚本流程控制语句和位置参数

1、位置参数

shell脚本流程控制语句和位置参数_第1张图片

输出上一条命令的执行结果,成功输出0,失败输出1
echo "$?"
输出脚本的名称
echo "$0"
输出参数的个数,具体的参数
echo "$#,$*"
输出第一个和第三个参数
echo "$1,$3"

2、判断语句

# 判断是否为目录
[ -d /etc/fstab ]
echo "$?"
# 判断是否为一般文件
[ -f /etc/fstab ]
echo "$?"
# 判断文件是存在,若存在则输出exist
[ -e /dev/cdrom ] && echo "exist"
# 当前用户
echo "$USER"
# 判断当前用户是否是root
[ $USER = root ] || echo "user"

DIR="/root/shell/test1"
if [ ! -e $DIR ]
then
        mkdir -p $DIR
fi
  • 判断语句应用
[root@localhost test]# [ $USER != root ] && echo "user" || echo "root"
root
[root@localhost test]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`
[root@localhost test]# echo $FreeMem 
551
[root@localhost test]# 
[root@localhost test]# [ $FreeMem -lt 1024 ] && echo "内存不足"
内存不足
[root@localhost ~]# [ $LANG != "zh_CN" ] && echo "非英文"
非英文

3、if语句

DIR="/root/shell/test1"
if [ ! -e $DIR ]
then
        mkdir -p $DIR
fi

ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
        echo "host $1 is On-line"
else
        echo "host $1 is Off-line"
fi
  • 成绩区间判断
#!/bin/bash
# 判断用户的成绩属于那个区间
read -p "请输入你的成绩(0-100):" GRADE
if [ $GRADE -gt 100 ] || [ $GRADE -le 0 ]
then
        echo "你输入的成绩无效"
elif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
        echo "成绩优秀"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
        echo "$GRADE通过"
else
        echo "$GRADE不通过"
fi

liunx中“&>" 一般是一个命令有标准输出和标准错误输出,也就是”1>“和“2>” 这两个的结合体, ”&>"
结果就是你输入命令,正确和错误信息都不输出在屏幕上,而是直接重定向到一个文件内,"&>“如果重复执行会覆盖原来的内容,而”&>>"则会追加在文件的末尾。

  • if-elif-else语句判断用户的成绩属于那个区间
#!/bin/bash
# 判断用户的成绩属于那个区间
read -p "请输入你的成绩(0-100):" GRADE
if [ $GRADE -gt 100 ] || [ $GRADE -le 0 ]
then
        echo "你输入的成绩无效"
elif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
        echo "成绩优秀"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
        echo "$GRADE通过"
else
        echo "$GRADE不通过"
fi
  • 批量创建用户
#!/bin/bash
# 批量创建用户
read -p "请输入密码:" PASSWD
for UNAME in `cat user.txt`
do
        id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
        echo "用户已存在"
else
        useradd $UNAME &> /dev/null
        echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
        echo "$UNAME ,创建成功"
else
        echo "$UNAME ,创建失败"
fi
fi
done
[root@localhost test]# tail -6 /etc/passwd

192.168.137.10
192.168.137.50
192.168.137.33
~    

4、for循环

  • 测试主机是否在线
#!/bin/bash
#测试主机是否在线
HLIST=$(cat ipadds.txt)
for IP in $HLIST
do
        ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ]
then
        echo "主机$IP在线"
else
        echo "主机$IP不在线"
fi
done

5、while循环

  • while猜价格
#!/bin/bash
# 猜价格
PRICE=$(expr $RANDOM % 1000)
TIMES=0
        echo "商品实际价格为0-999,猜猜看是多少?"
while true
do
        read -p "请输入你猜测的价格数目:" INT
let TIMES++
if [ $INT -eq $PRICE ]
then
        echo "恭喜你答对了,实际价格是$PRICE"
        echo "你共猜了$TIMES次"
exit 0
elif [ $INT -gt $PRICE ]
then
        echo "太高了"
else
        echo "太低了"
fi
done

6、expr命令

  • expr是Linux 系统下的 一款多功能计算器。

expr 命令书写上的规则:
请用空格隔开每个项。
请将反斜杠(\)放在 Shell 特殊字符前面。
请对包含空格和其他特殊字符的字符串用引号括起来。

[root@localhost test]# expr length "linux"
5
[root@localhost test]# expr $RANDOM % 1000
904
[root@localhost test]# expr 20 \* 20
400

你可能感兴趣的:(Linux)