这篇文章上次修改于 1747 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
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
没有评论