#!/bin/bash
在Unix中,凡是被 #! 注释的,统统是指明加载器(解释器)的路径,也就是声明用哪个程序来运行本文件。 比如: #!/bin/bash #上面的意思是说,把下面的字符统统传递给/bin/bash echo "Hello Boy!" ... 当然,还有很多。 #!/bin/lua #!/bin/perl #!/bin/python# 终止执行exit 2
接收用户参数
#!/bin/bash echo "当前脚本名称:$0" echo "参数个数: $#" echo "参数 list: $*" echo "第一个参数 $1" echo "==============" ls echo "==============" echo "上次命令返回值:$?"
文件测试语句
-d // 文件是否为目录
-e // 文件是否存在
-f // 文件是否为一般文件
-r // 当前用户是否可读
-w // 是否可写
-x // 是否可执行
lyb@lyb-virtual-machine:~/work$ [ -f example.sh ] lyb@lyb-virtual-machine:~/work$ echo $? 0 lyb@lyb-virtual-machine:~/work$ [ -f example2.sh ] lyb@lyb-virtual-machine:~/work$ echo $? 1 lyb@lyb-virtual-machine:~/work$ [ -d example2.sh ] lyb@lyb-virtual-machine:~/work$ echo $? 1
*条件表达式两侧均应留空格
逻辑语句,与 c++ 含义一样
逻辑与 && // 前面的条件成立才会执行后面的
逻辑或 ||
逻辑非 !
lyb@lyb-virtual-machine:~/work$ [ -f example.sh ] && echo "文件存在" 文件存在
字符串比较运算符
= // 是否相同
!= // 是否不同
-z // 是否为空
lyb@lyb-virtual-machine:~/work$ [ dfd = dfd ] lyb@lyb-virtual-machine:~/work$ echo $? 0 lyb@lyb-virtual-machine:~/work$ [ dfd = dfdw ] lyb@lyb-virtual-machine:~/work$ echo $? 1
整数比较运算符
-eq // ==
-ne // !=
-gt // >
-lt // <
-le // <=
-ge // >=
= // 特定条件下是赋值,如 numer=27,注意前后不能带空格
lyb@lyb-virtual-machine:~/work$ [ 10 -eq 9 ] lyb@lyb-virtual-machine:~/work$ echo $? 1
lyb@lyb-virtual-machine:~/work$ number=27 lyb@lyb-virtual-machine:~/work$ echo $number 27
if 条件测试语句
#!/bin/bash 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 "$GRADE is Fail" fi
for 条件循环语句
#!/bin/bash read -p "Enter the users password:" PASSWD # users.txt 中存放用户名,每行一个 for UNAME in `cat users.txt` do # id uname // 查看用户信息,用户不存在时返回非0 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
while 条件循环语句
#!/bin/bash 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
case 条件测试语句
#!/bin/bash read -p "请输入一个字符,按Enter确认:" KEY case "$KEY" in [a-z] | [A-Z]) echo "您输入的是 字母" ;; [0-9]) echo "您输入的是 数字" ;; *) echo "$KEY 不是单个字母或数字" esac
计划任务服务程序
一次性计划任务 at 命令
启动 atd 服务
at 23:00 poweroff // 设置一次性计划任务 23::00 关机, Ctrl + d 退出并保存编写任务
at -l // 查看未执行的一次性计划任务,每个任务有顺序号
atrm 1 // 删除顺序号为1的任务
[root@localhost ~]# at 23:03 at> reboot at> <EOT> job 6 at Sun Jan 12 23:03:00 2020 Can't open /var/run/atd.pid to signal atd. No atd running?
周期计划任务 crontab 命令
crontab -e // 创建、编辑计划任务,进入编辑器编写任务
任务格式(没有设置需要用 * 占位,时间段可以用‘,’或‘-’隔开,如 8,9,10 月,1-5 号等,可以用 / 表示执行任务的间隔时间,如 */2 表示每隔2分钟执行一次任务)
分 时 日 月 星期 命令
crontab -l // 查看计划任务
crontab -r // 删除计划任务
计划任务参数中,所有命令用绝对路径(whereis 命令可以查看命令路径)
------------------------------------------
来源:https://www.cnblogs.com/liyubo/p/12173731.html