1.执行脚本两种方式
- bash解释器命令直接运行Shell脚本文件(不需添加执行权限)
- 输入完整路径的方式执行(需要添加可执行权限)
2.接收用户的参数
- $0 : 对应的是当前Shell脚本程序的名称
- $# : 共输入个多少的参数
- $* : 输入的参数有哪些
- $? : 对应的显示上一次命令的执行返回的值
- $1,$2,$3,$4 : 分别对应的低N个位置的参数
3.判断用户的参数
- 条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回其他的随机数值。(表达式两边均应有一个空格)
- 格式: [ 条件表达式 ]
- 根据测试对象划分4种:
- 文件测试语句
- 逻辑测试语句
- 整数值比较语句
- 字符串比较语句
3.1 文件测试所用的参数
运算符 | 作用 |
---|---|
-d | 测试文件是否为目录类型 |
-e | 测试文件是否存在 |
-f | 判断是否为一般文件1 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限执行 |
3.2 逻辑测试所用的参数
运算符 | 作用 |
---|---|
&& | “与”,表示当前面的命令执行成功后才会执行它后面的命令 |
| | | “或” ,表示当前面的命令执行失败后才会执行它后面的命令 |
! | “非” ,表示把条件测试中的判断结果取相反值。 |
3.3 可用的整数比较运算符
运算符 | 作用 |
---|---|
-eq | 是否等于 |
-nq | 是否不等于 |
-gt | 是否小于 |
-lt | 是否大于 |
-le | 是否等于或小于 |
-ge | 是否大于或等于 |
3.4 常见的字符串比较运算符
运算符 | 作用 |
---|---|
= | 比较字符串内容是否相同 |
!= | 比较字符串内容是否不同 |
-z | 判断字符串内容是否为空 |
4.流程控制语句
4.1 if 条件测试语句
- 单分支结构:
由 if 、then、fi 关键词组成,只有在条件成立后才执行预设的命令,“如果…那么…”
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR]
then
mkdir -p $DIR
fi
- 双分支结构:
由if、then、else、fi 关键词组成。它进行一次条件匹配判断,如果与条件匹配,则去执行相应的预设命令。反之则去执行不匹配的时的预设命令,相当于“如果…那么…或者…那么…”
#!/bin/bash
#-c参数来规定尝试的次数,
#使用-i参数定义每个数据包的发送间隔,
#使用-W参数定义等待超时的时间
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
# $? 若前面的命令执行成功,则返回0
if [ $? -eq 0 ]
then
echo "Host $1 is on-line"
else
echo "Host $1 is off-line"
fi
- 多分支结构
有 if、then、else、elif、fi关键词组成,进行多次条件的判断
#!/bin/bash
#read 用来读取用户输入信息的命令,能够把接收到的用户输入信息赋值给后面的指定变量
#-p 参数用于向用户显示一定的提示信息
read -p "Enter your score (0-100): " GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE IS Pass"
else
echo "Fail"
fi
4.2 for 条件循环语句
格式:
for 变量名 in 取值列表
do
命令序列
done
案例:
#!/bin/bash
read -p "Enter The User Password : " PASSWD
for UNAME in `cat in users.txt`
do
id $UNAME &>/dev/null
if [ $? -eq 0 ]
then
echo "Already exists"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , create success"
else
echo "$UNAME , create failure"
fi
fi
done
4.3 while 条件循环语句
- 含义:
它的循环结构往往在执行前不确定最终执行的次数。
通过判断条件测试的真假来决定是否继续执行命令
格式:
while 条件测试操作
do
命令序列
done
案例:
#!/bin/bash
# expr 命令取得结果
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
4.4 case 条件测试语句
- 含义:
case语句是在多个范围内匹配数据,若数据匹配成功则执行命令并结束整个条件测试;而如果数据不在所列出的范围内,则会去执行星号(*)中所定义的默认命令。
格式:
case 变量值 in
模式1)
命令序列1
;;
模式1)
命令序列2
;;
......
案例:
#!/bin/bash
#-p 用于向用户显示一定的提示信息
read -p "请输入一个字符,并按Enter键确认: " KEY
case "$KEY" in
[a-z] | [A-Z])
echo "您输入的是 字母"
;;
[0-9])
echo "您输入的是 数字"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
esac
5 计划任务服务程序
5.1 一次性计划任务
- 设置: at 时间
- 管道符设置:
- 操作:( 默认为交互式方法 操作)。ctrl + D 组合键结束编写任务
- 查看已设置好但未执行的一次性任务: at -l
- 删除:atrm 任务序列号
5.2 周期性计划执行
- 设置:crontab -e
- 设置:crontab -l
- 删除:crontab -r
- 格式:“分、时、日、月、星期 命令”,如果没有设置需要使用 *
- 参数说明:
- 逗号(,)分别表示多个时间段
- 减号(-)表示一段连续时间周期
- 除号(/)表示执行任务的间隔时间,“*/2”表示每隔两分钟
- 注意:
- 命令需要用绝对路径
- “分” 字段必须要有数值,绝对不能为空或是*号
- “日”和“星期”字段不能同时使用,否则就会发生冲突
- 在用定时任务调用脚本任务时,需注意脚本中的环境变量和一些命令的执行效果,可在脚本中添加 “set -x” 调试看下定位问题
字段 | 说明 |
---|---|
分 | 0-59 整数 |
时 | 0-23 整数 |
日 | 1-31 整数 |
月 | 1-12 整数 |
星期 | 0-7 整数,0和7均为星期日 |
命令 | 要执行的命令或程序的脚本 |
出自书籍 《Linux就该这么学》
Linux中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件。第一个属性为 [-] 。 ↩︎
来源:CSDN
作者:凸凸脑勺
链接:https://blog.csdn.net/weixin_40271078/article/details/104100234