CentOS7 自动化运维基础 Shell脚本(判断语句)
hyui 4/3/2020 linuxBash
# Shell脚本
- 脚本不是命令的堆积,脚本中还包含变量设置、控制与循环、逻辑运算等。
- 脚本的执行效率比C++之类的编程语言低,比一些高级编程语言执行效率高。
# 运行脚本的方式
[root@Hyui-VM ~]# cat print.sh
#!/bin/bash
echo "Hello World!"
exit 0
分为3种:
1.赋予权限,直接运行
[root@Hyui-VM ~]# chmod a+x print.sh
[root@Hyui-VM ~]# ./print.sh
Hello World!
2.没有权限,通过bash和sh运行
[root@Hyui-VM ~]# bash print.sh
Hello World!
[root@Hyui-VM ~]# sh print.sh
Hello World!
3.没有权限,通过.或source运行
[root@Hyui-VM ~]# . print.sh
Hello World!
[root@Hyui-VM ~]# source print.sh
Hello World!
- 执行方式不同之处在于:第一种方法是赋予脚本权限后在当前Shell下开启一个子进程用于运行脚本;第二种方法通过bash和sh执行,执行时不会关心#!后的解释器;第三种方法使用.和source执行会直接在当前Shell环境执行。
# 判断语句应用
# if语句
# 格式语法1:
if 条件
then
命令序列
fi
- 判断当前用户为root
[root@Hyui-VM ~]# cat user.sh
#!/bin/bash
if [ "$(id -u)" -eq "0" ];
then
echo "You are root!"
fi
# 格式语法2:
if 条件
then
命令序列
else
命令序列
fi
- 一个简单的判定:
[root@Hyui-VM ~]# cat user.sh
#!/bin/bash
read -p "Input you password:" password
if [ "$password" == "123456" ];
then
echo "password OK"
else
echo "password ERROR"
fi
- 运行结果
[root@Hyui-VM ~]# ./user.sh
Input you password:123456
password OK
[root@Hyui-VM ~]# ./user.sh
Input you password:654321
password ERROR
# 格式语法3:
if 条件
then
命令序列
elif 条件
then
命令序列
elif 条件
then
命令序列
else
命令序列
fi
- 输入一个数字,如果大于80,输出great;大于70但小于80,输出good;大于60小于70,输出pass;小于60,输出fail。
[root@Hyui-VM ~]# cat num.sh
#!/bin/bash
read -p "Please input a number:" num
if [ "$num" -ge 80 ];
then
echo "great"
elif [ "$num" -ge 70 ];
then
echo "good"
elif [ "$num" -ge 60 ];
then
echo "pass"
else
echo "fail"
fi
- 运行结果
[root@Hyui-VM ~]# ./num.sh
Please input a number:85
great
[root@Hyui-VM ~]# ./num.sh
Please input a number:75
good
[root@Hyui-VM ~]# ./num.sh
Please input a number:65
pass
[root@Hyui-VM ~]# ./num.sh
Please input a number:55
fail
# case语句
# 语法格式1:
case $变量名称 in
模式1)
命令序列
;;
模式2)
命令序列
;;
模式N)
命令序列
;;
*)
esac
# 示例1
- 周三周五备份日志
[root@Hyui-VM ~]# cat backup.sh
#!/bin/bash
DATE=$(date +%a)
TIME=$(date +%y+%m+%d)
case $DATE in
Wed|Fri)
tar -czf /root/${TIME}_log_tar.gz /var/log&>/dev/null
echo "OK"
;;
*)
echo "Today is ${DATE}"
esac
- 运行结果
[root@Hyui-VM ~]# ./backup.sh
OK
[root@Hyui-VM ~]# ls ~ | grep log
20+04+03_log_tar.gz
# 示例2
- 判断输入字符为数字还是字母
[root@Hyui-VM ~]# cat nw.sh
#!/bin/bash
read -p "Input a number or word:" nw
case $nw in
[a-z]|[A-Z])
echo "This is a character."
;;
[[:digit:]])
echo "This is a number."
;;
*)
echo "Error"
esac
- 运行结果
[root@Hyui-VM ~]# ./nw.sh
Input a number or word:5
This is a number.
[root@Hyui-VM ~]# ./nw.sh
Input a number or word:a
This is a character.
[root@Hyui-VM ~]# ./nw.sh
Input a number or word:@
Error