天天看点

SHELL脚本命令

脚本声明       #!/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条件语句

SHELL脚本命令

#!/bin/bash

DIR="/share/cdrom"

if [ ! -e $DIR ]        #如果文件目录不存在,则创建该目录

then

mkdir -p $DIR

fi

SHELL脚本命令

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

SHELL脚本命令

#!/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条件循环语句

SHELL脚本命令

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

SHELL脚本命令

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

SHELL脚本命令

判断字符

#!/bin/bash

read -p "请输入一个字符,并且按Enter键:" KEY

case "$KEY" in

[a-z][A-Z])

echo "你输入的是字母。"

;;

[0-9])

echo "你输入的是数字。"

;;

*)

echo "你输入的是符号、空格、或其他"

esac

计划任务服务程序

at

[[email protected] ~]# at 23:30

at > systemctl restart httpd

at > 此处请同时按下 Ctrl + D 组合键来结束编写计划任务

[[email protected] ~]# echo "systemctl restart httpd" | at 23:30

at -l        #显示一次性计划任务

crond

使用 crond 设置任务的参数字段说明

字段 说明
取值为 0~59 的整数
取值为 0~23 的任意整数
取值为 1~31 的任意整数
取值为 1~12 的任意整数
星期 取值为 0~7 的任意整数,其中 0 与 7 均为星期日
命令 要执行的命令或程序脚本

[[email protected] ~]# crontab -e         #创建计划任务

[[email protected] ~]# 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 /tmp2 * * *     /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

继续阅读