脚本声明 #!/bin/bash
脚本注释 #巴拉巴拉的描述
脚本命令 ls pwd
echo "$0" 脚本名称
echo "$#,$*" #接受了几个参数,*参数分别使声明
echo "$1,$3,$5" 分别接收到的第几个参数
haha.sh a b c d e f
6,a b c d e f
a,c,e
[ -love $GIRLFRIEND ]
echo $? #返回上一条命令执行的结果
0 是
1 否
文件测试所用的参数
运算符 | 作用 |
-d | 测试文件是否为目录类型 |
-e | 测试文件是否存在 |
-f | 判断是否为一般文件 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限执行 |
[ -d /etc/fstab ] #判断是否为目录
echo $? #是的就返回结果0
&& 逻辑与,若前面成功,则执行后面
|| 逻辑或 若前面失败,则执行后面
! 逻辑非
[ -e /dev/cdrom ] && echo "Exist" #逻辑与,判断文件如果存在,就输出Exist
[ $USER = root ] || echo "user" #逻辑或,判断是否为root用户,不是则输出user
[ ! $USER = root ] && echo "user" || echo "root" #逻辑非,判断当前用户是否为root……
可用的整数比较运算符
运算符 | 作用 |
-eq | 是否等于 |
-ne | 是否不等于 |
-gt | 是否大于 |
-lt | 是否小于 |
-le | 是否等于或小于 |
-ge | 是否大于或等于 |
[ 10 -gt 10 ] #判断10是否大于10,如果不是,$?返回1
#判断内存是否少于1024,如果是就输出不足
[ `free -m | grep Mem: | awk ‘{print $4}’` -lt 1024 ] && echo “不足” || echo “充足”
`反引号
if条件语句
#!/bin/bash
DIR="/share/cdrom"
if [ ! -e $DIR ] #如果文件目录不存在,则创建该目录
then
mkdir -p $DIR
fi
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ] #判断主机是否在线
then
echo "the $1 host is On-line"
else
echo "the $1 host is off-line"
fi
#!/bin/bash
#判断分数状况
read -p "Enter your score (0-100):" GRADE
if [ $GRADE -le 100 ] && [ $GRADE -ge 85 ] ; then
echo "得分$GRADE是优秀"
elif [ $GRADE -le 84 ] && [ $GRADE -ge 75 ] ; then
echo "得分$GRADE是良好"
elif [ $GRADE -le 74 ] && [ $GRADE -ge 65 ] ; then
echo " 得分$GRADE是合格"
else
echo "不及格,或者分数有误"
fi
for条件循环语句
#!/bin/bash
read -p "Please input your password: " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ] ; then
echo "用户已存在,请勿重复创建"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin root
if [ $? -eq 0 ] ; then
echo "用户$UNAME创建成功"
else
echo "用户创建失败"
fi
fi
done
#!/bin/bash
#判断主机列表内的主机是否在线
HLIST=$(cat ~/hostlist.txt)
for IP in $HLIST
do
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ] ; then
echo "$IP is on-line"
else
echo "$IP is off-line"
fi
done
#!/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
判断字符
#!/bin/bash
read -p "请输入一个字符,并且按Enter键:" KEY
case "$KEY" in
[a-z][A-Z])
echo "你输入的是字母。"
;;
[0-9])
echo "你输入的是数字。"
;;
*)
echo "你输入的是符号、空格、或其他"
esac
计划任务服务程序
at
[root@linuxprobe ~]# at 23:30
at > systemctl restart httpd
at > 此处请同时按下 Ctrl + D 组合键来结束编写计划任务
[root@linuxprobe ~]# echo "systemctl restart httpd" | at 23:30
at -l #显示一次性计划任务
crond
使用 crond 设置任务的参数字段说明
字段 | 说明 |
分 | 取值为 0~59 的整数 |
时 | 取值为 0~23 的任意整数 |
日 | 取值为 1~31 的任意整数 |
月 | 取值为 1~12 的任意整数 |
星期 | 取值为 0~7 的任意整数,其中 0 与 7 均为星期日 |
命令 | 要执行的命令或程序脚本 |
[root@localhost ~]# crontab -e #创建计划任务
[root@localhost ~]# crontab -l #显示计划任务列表
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
0 1 * * 1,2,3,4,5 /usr/bin/rm -rf /tmp/*
在 crond 服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用 whereis 命令进行查询
30 * * * * /usr/sbin/reboot #每30分钟执行一次命令
30 3 * * * /usr/sbin/reboot #每天凌晨3点30分钟执行命令
30 3 5 * * /usr/sbin/reboot #每个月的5日的凌晨3:30分执行命令
30 3 5 9 * /usr/sbin/reboot #每年9月5日的凌晨3:30分执行命令
30 3 * 9 2 /usr/sbin/reboot #每年9月的星期二凌晨3:30分执行命令
30 3 * * 2 /usr/sbin/reboot #每个礼拜二执行命令
30 */2 * * * /usr/sbin/reboot #每隔2小时执行命令
30 2 3-5 * * /usr/sbin/reboot #每月的3号到5号凌晨2:30分执行命令
30 2 3,5,7 * * /usr/sbin/reboot #每月的3,5,7号凌晨2:30分执行命令
30 * * */2 * /usr/sbin/reboot #每隔2个月执行命令
10,30 * * * * /usr/sbin/reboot #每小时的10,30分执行命令
#!/bin/bash
#创建user1-20用户,并且密码随机
for i in {121..130}
do
useradd user$i
PASSWORD=`openssl rand -base64 5`
echo "$PASSWORD" | passwd --stdin user$i &> /dev/null
echo "创建的用户为 user$i ,密码为$PASSWORD"
done