Loading... # 1. 工作方式 - 交互式 - - 用户每输入一条命令就立即执行 - 批处理 - - 事先编写好一个完整的Shell脚本,Shell会`一次性执行` 脚本中诸多命令 # 2.脚本元素 ```bash #!/bin/bash #For Example By ShuaiHao pwd ls -al ``` - 第一行脚本声明`#!` 用来告诉系统使用哪种解释器来执行脚本 - 第二行是对脚本功能和某些命令的介绍信息 - 三四行为脚本执行的shell命令 # 3.接收用户的参数 ```bash [root@linux~]# ./Example.sh one two three four five six ``` - `$0` 对应的是当前Shell脚本的名称 - `$#` 对应的是一共有几个参数 - `$?` 对应的是显示上一次命令的执行返回值 - `$*` 对应的是所有位置的参数值 - `$1$2``$3` 分别对应第N个位置的参数值 - Example ``` #!/bin/bash # For Example By ShuaiHao echo "当前脚本名称为$0" echo "总共有$#个参数,分别是$*" echo "第一个参数为$1,第五个参数为$5" ``` # 4. 判断用户的参数 ## (一).文件测试语句 > 使用指定条件来判断文件是否存在或权限是否满足等情况的运算符 | 运算符 | 作用 | | ------ | -------------------------- | | -d | 测试文件是否为目录类型 | | -e | 测试文件是否存在 | | -f | 判断是否为一般文件 | | -r | 测试当前用户是否有权限读取 | | -w | 测试当前用户是否有权限写入 | | -x | 测试当前用户是否有权限执行 | ```bash [root@linux ~]# [ -d /etc/fstab ] [root@linux ~]echo $? 1 [root@linux ~]# [ -f /etc/fstab ] [root@linux ~]# echo $? 0 ``` ## (二).逻辑测试语句 > 用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。 > > 在终端中利用 逻辑 `与或``非` 来进行逻辑判断。 - 判断/dev/cdrom是否存在,若存在则输出Exist字样 ```bash [root@linux ~]# [ -e /dev/cdrom ] && echo "Exist" Exist ``` - 结合系统环境变量判断当前用户是否为非管理员身份 ```bash [root@linux ~]# echo $USER root [root@linux ~]# [$USER = root ] || echo "user" [root@linux ~]# su - linux [linux@linux ~]# [$USER = root ] || echo "user" user ``` - 判断当前用户是否为非管理员的用户 ```bash [root@linux ~]# [! $USER = root ] || echo "administrator" administrator ``` ## (三).整数值比较语句 | 运算符 | 作用 | | ------ | ------------ | | -eq | 是否等于 | | -ne | 是否不等于 | | -gt | 是否大于 | | -lt | 是否小于 | | -le | 是否小于等于 | | -ge | 是否大于等于 | ```bash [root@linux ~]# [ 10 -gt 10 ] [root@linux ~]# echo $? 1 [root@linux ~]# [ 10 -eq 10 ] [root@linux ~]# echo $? 0 [root@linux ~]# FreeMem=`free -m |grep Mem: | awk '{print $4}'` [root@linux ~]# [ $FreeMem -lt 1024 ] && echo "内存不足" ``` ## (四).字符串比较语句 | 运算符 | 作用 | | ------ | ---------------------- | | = | 比较字符串内容是否相同 | | != | 比较字符串内容是否不同 | | -z | 判断字符串是否为空 | ```bash [root@linux ~]# [ $ LANG != "en.US" ] && echo "非英语" [root@linux ~]# [ -z $String ] [root@linux ~]# echo $? 0 ``` # 5.流程控制语句 ## (一).if条件测试语句 ### a. 单分支if语句 ```bash if 条件测试操作 then 命令序列 fi ``` ### b. 双分支if语句 ```bash if 条件测试操作 then 命令序列1 then 命令序列2 fi ``` ### c. 多分支if语句 ```bash if 条件测试操作1 then 命令序列1 elif 条件测试操作2 then 命令序列2 else 命令序列3 fi ``` ## (二).for条件循环语句 ```bash for 变量名 in 取值列表 do 命令序列 done ``` ## (三).while条件循环语句 ```bash while 条件测试操作 do 命令序列 done ``` ## (四).case条件测试语句 ```shell case 变量值 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; *) 默认命令序列 esac ``` # 6.计划任务服务程序 ## (一).一次性计划任务 ```shell [root@linux ~]# at 23:30 at > systemctl restart httpd at > 此处同时按下 ctrl+d 来结束编写计划任务 [root@linux ~]# at -l 3 Mon Apr 27 23:30:00 2017 a root ``` ## (二).长期性计划任务 > crontab中必须使用绝对路径 ```shell [root@linux ~]# crontab -e 25 3 * * 1,3,5 /usr/bin/atr -cvzf backup.tar.gz /home/www/root ```  Last modification:December 1, 2021 © Allow specification reprint Like 0 If you think my article is useful to you, please feel free to appreciate