shell 脚本复习
目标
写个测试脚本,重启50次 , 每次重启后执行一些命令,保存到文本,然后再次重启 。简单脚本, 直接 shell 走一波。
思路
- 每次输出一波文本 , 则每次用一个目录来保存这些文本
- 重启后直接执行命令 , 那么需要在 rc.local 添加执行命令
- 执行完再重启, 就需要 reboot 了
- 次数计数,似乎只能在本地文本中保存次数了。先把次数写到文本,重启后,再读,再累加。
脚本
这里是伪脚本,原脚本忘记抄下来了。可能有部分不对的地方。
#!/bin/bash
# 当前目录
cur_dir=`pwd`
#计数文本
cot="$cur_dir/cot.txt"
#最大次数
limit=50
if[[ -e $cot ]]
then
#计数文本存在
#取文本内容
num=`cat $cot`
#先计数加1
echo $((num+1)) > $cot
#休息一会儿,等系统初始化
sleep 5m
else
#第一次,没有文本,计数文本不存在,初始化一个文本
echo "1" > $cot
fi
。。。。。。。
#要执行的脚本
。。。。。。
#取数字
num=`cat $cot`
#判断是不是到达最大次数了
if[[ $((num)) -eq $limit ]]
then
#到次数,退出
exit 0
fi
#没到次数,重启
shutdown -r
简单一个脚本,搞了几个小时,还是忘性大。。。
简单几个点吧, 这里再理一下。
shell 字段串转数字
语法:$((num))
转数字后可以跟其他数字做比较,也可以做计算。也可以直接拿字符串的数字,在这个语法里计算
例如:
num="123"
$((num+1)) # 结果是:124
取字符串长度
这里也提一下吧 ,语法: ${#num}
num="abc123"
${#num} # 结果是: 6
文件的判断符号
-
-b $FILE :如果FILE存在且为块特殊文件,则为True。
-
-c $FILE :如果FILE存在且为特殊字符文件,则为True。
-
-d $FILE :如果FILE存在且为目录,则为True。
-
-e $FILE :如果FILE存在且为文件,则为True,无论类型(节点,目录,套接字等)如何。
-
-f $FILE :如果FILE存在且为常规文件(不是目录或设备),则为True。
-
-G $FILE :如果FILE存在且与运行命令的用户具有相同的组,则为True。
-
-h $FILE :如果FILE存在且为符号链接,则为True。
-
-g $FILE :如果FILE存在且设置了set-group-id(sgid)标志,则为True。
-
-k $FILE :如果FILE存在且设置了粘滞位标志,则为True。
-
-L $FILE :如果FILE存在且为符号链接,则为True。
-
-O $FILE :如果FILE存在并且由运行该命令的用户拥有,则为True。
-
-p $FILE :如果FILE存在且为管道,则为True。
-
-r $FILE :如果FILE存在且可读,则为True。
-
-S $FILE :如果FILE存在且为套接字,则为True。
-
-s $FILE :如果FILE存在且非零大小,则为True。
-
-u $FILE :如果设置了exists和set-user-id(suid)标志,则为True。
-
-w $FILE :如果FILE存在且可写,则为True。
-
-x $FILE :如果FILE存在且可执行,则为True。
sleep 命令
sleep NUMBER [SUFFIX]...
NUMBER可以是正整数或浮点数。
SUFFIX可以是下列之一:
s - 秒(默认)
m - 分钟
h - 小时
d - 天
sleep 是阻塞,且不可停止。只能杀进程了
数字的比较大小
- -gt 大于
- -lt 小于
- -eq 等于
- -ne 不等于
- -ge 大于等于
- -le 小于等于
重启命令
reboot
: 强制重启,强制停止一切进程。shutdown -r
: 等正在进行的进程结束后,再重启
输出到文本
>
: 清空文本,再写入>>
: 追加到文本最后,有换行
如果文章有帮助到您,请点个赞,您的反馈会让我感到文章是有价值的