#!/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