shell脚本应用(2)

一:条件测试操作

1:文件测试

[root@localhost ~]# [ -d /media/cdrom ]              \-d,测试目录是否存在

[root@localhost ~]# echo $?

0

[root@localhost ~]# [ -d
/media/cdrom/Server ]

[root@localhost ~]# echo $?

0

[root@localhost ~]# [ -d
/media/cdrom/server ]

[root@localhost ~]# echo $?

1

[root@localhost ~]# [ -d
/media/cdrom/server ] && echo “yes”     \无输出表示不存在

[root@localhost ~]# [ -d
/media/cdrom/Server ] && echo “yes”

yes

2:整数值比较

[root@localhost ~]# unum=who | wc -l

[root@localhost ~]# [ $unum -gt 5 ]
&& echo “Too many”

[root@localhost ~]# [ $unum -gt 0 ]
&& echo “Too many”

Too many

[root@localhost ~]# freecc=$(free -m | grep
“Mem” | awk ‘{print $4+$6}’)  
\可用内存空间

[root@localhost ~]# [ $freecc -lt 2048 ]
&& echo ${freecc}MB          \小于某值后输出具体的值

1269MB

3:字符串比较

[root@localhost ~]# echo $LANG    \当前的语言环境

zh_CN.UTF-8

[root@localhost ~]# [ LANG !=
“en.US” ] && echo “not en.US”      \字符串比较测试  !=前后有空格

not en.US

[root@localhost ~]# read -p “是否覆盖现有文件(yes/no)?” ACK

是否覆盖现有文件(yes/no)?yes

[root@localhost ~]# [ $ACK =
“yes” ] && echo “覆盖”

覆盖

[root@localhost ~]# read -p “是否覆盖现有文件(yes/no)?” ACK

是否覆盖现有文件(yes/no)?no

[root@localhost ~]# [ $ACK = “no”
] && echo “不覆盖”

不覆盖

4:逻辑测试

[root@localhost ~]# uname -r

3.10.0-514.el7.x86_64

[root@localhost ~]# Mnum=$(uname -r | awk
-F. ‘{print $1}’)

[root@localhost ~]# Snum=$(uname -r | awk
-F. ‘{print $2}’)

[root@localhost ~]# [ $Mnum -eq 3 ]
&& [ $Snum -gt 4 ] && echo “符合要求”

符合要求

二:使用if条件语句

1:单分支if语句

[root@localhost ~]# vim chkmountdir.sh    \如果挂在点不存在,自动创建

#!/bin/bash

MOUNT_DIR="/media/cdrom"

if [ ! -d $MOUNT_DIR ]

then

mkdir -p $MOUNT_DIR

fi

[root@localhost ~]# chmod +x chkmountdir.sh

[root@localhost ~]# ./chkmountdir.sh

[root@localhost ~]# vi /opt/chkifroot.sh     \判断是否是root,如果不是,没有权限操作

#!/bin/bash

if [ “$USER” != “root”
]

then

echo “错误:非root用户,权限不足!”

exit 1

fi

fdisk -l /dev/sda

[root@localhost ~]# chmod +x
/opt/chkifroot.sh

[root@localhost ~]# /opt/chkifroot.sh           \root可以执行

[aaa@localhost root]$ /opt/chkifroot.sh          \其他用户不可以执行

2:双分支if语句应用

[root@localhost ~]# vim chkmountdir.sh

#!/bin/bash

MOUNT_DIR="/media/cdrom"

if [ ! -d $MOUNT_DIR ]

then

mkdir -p $MOUNT_DIR

else

mount /dev/cdrom $MOUNT_DIR

fi

[root@localhost ~]# vi pinghost.sh        \判断另一主机是否在线

#!/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

[root@localhost ~]# chmod +x pinghost.sh

[root@localhost ~]# ./pinghost.sh
192.168.10.101

Host 192.168.10.10 is up.

[root@localhost ~]# ./pinghost.sh
192.168.10.1

Host 192.168.10.1 is down.

注释:

-c:ping的次数

-i:ping的间隔

-W:超时时间

[root@localhost ~]# vi chkftpd.sh       \检查vsftpd是否运行

#!/bin/bash

systemctl status vsftpd &>/dev/null

if [ $? -eq 0 ]

then

echo
“监听地址:$(netstat -anpt | grep vsftpd | awk ‘{print $4}’)”

echo
“进程ID:$(pgrep -x vsftpd)”

else

echo
“警告,vsftpd服务不可用”

fi

[root@localhost ~]# chmod +x chkftpd.sh

[root@localhost ~]# ./chkftpd.sh

警告:vsftpd服务不可用!

3:多分支if语句应用

[root@localhost ~]# vim chkmountdir.sh

#!/bin/bash

MOUNT_DIR="/media/cdrom"

if [ ! -d $MOUNT_DIR ]

then

mkdir -p $MOUNT_DIR

mount /dev/cdrom $MOUNT_DIR

elif

[ ! -d /$MOUNT_DIR/Packages ]

then

mount /dev/cdrom /media/cdrom

else

exit 1

fi

[root@localhost ~]# vi gradediv.sh       \检查考试成绩是否合格

#!/bin/bash

read -p “请输入您的分数(0-100):” GRADE

if [ $GRADE -ge 85 ] && [ $GRADE
-le 100 ]

then

echo “$GRADE 分,优秀”

elif [ $GRADE -ge 70 ] && [ $GRADE
-le 84 ]

then

echo “$GRADE 分,合格”

else

echo “$GRADE 分,不合格”

fi

[root@localhost ~]# chmod +x gradediv.sh

[root@localhost ~]# ./gradediv.sh

请输入您的分数(0-100):67

67 分,不合格

[root@localhost ~]# ./gradediv.sh

请输入您的分数(0-100):78

78 分,合格

[root@localhost ~]# ./gradediv.sh

请输入您的分数(0-100):90

90 分,优秀

更多分支

[root@localhost ~]# vi gradediv.sh

#!/bin/bash

read -p “请输入你的成绩” GRADE

if [ $GRADE -ge 85 ] && [ $GRADE
-le 100 ]

then

echo
“$GRADE分,成绩优秀”

elif [ $GRADE -ge 70 ] && [ $GRADE
-le 84 ]

then

echo
“$GRADE分,合格”

elif
[ $GRADE -ge 0 ]&& [ $GRADE -le 69 ]

then

echo
“不及格”

else

echo
“输入错误”

fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值