shell脚本编程在linux系统管理拥有着极为强大的能力,可以说,当前的工作已经日益偏向自动化了。如果我们极不愿意去学习这方面的知识,可能在未来的工作中颇有不便。尽管我本人的编程能力较差,但是对于自动化的监控和警报,或者自动化的让系统自己处理一些小问题这类事情,我还是比较感兴趣的。一来不用自己天天盯着服务器,省出自己的时间去学习或做一些别的工作,无疑是更有意义的;其次呢,也是对于我的短板的补足,编程本身还是很有趣的,如果能够驾驭好这个工具,那可能真的可以创造出一个属于自己的世界。

一、脚本规则

1、文件名

通常,脚本文件由.sh结尾,便于标识和分辨脚本文件,linux系统中拥有大量的脚本文件,包括命令的执行也无法脱离脚本文件的存在。

2、内容声明

通常,脚本文件以#!/bin/bash为第一行,声明文件为bash脚本文件。

3、变量$符

变量是编程中最重要的元素之一,倘若一个程序均用常量编写,那么在参数改变或版本更迭中将遇到极大的麻烦。通常,引用变量的内容在变量名前增加一个$符即可。

4、引号

引号分为单引号和双引号,使用单引号时,引号中的内容将直接被引用,不考虑特殊字符的影响。而使用双引号时,特殊符号可能拥有特殊的含义,如需输出符号本身,则需要通过转义达到效果。

二、for循环

语法:

for 变量  in  循环次数(变量值)
do(循环体的开始)
   循环体内容
done(循环体的结束)

for语句:

for  num  in $(seq 1 10)
for  file  in  *.txt

例子1:

#!/bin/bash
for NAME in li zhang wang
#for语法  NAME变量  in 语法  变量的值(循环3次)
do
#开始循环
    ADDRESS=$NAME@asfor.cn
  #定义一个ADDRESS变量  引用NAME变量
    MESSAGE=’Hello,ASFOR.CN!’
  #单引号遇到特殊字符均不转义  定义一个MESSAGE变量
    echo $MESSAGE | mail -s Reminder $ADDRESS
  #发信语法:mail -s (subject) “主题”  用户 回车后写内容  以.点结束
  #此处将 $MESSAGE 输出作为内容发送给 ADDRESS
done
#结束语法

例子2:

#!/bin/bash
#脚本声明
for  num  in  $(seq 1  1000)
do 
touch  /tmp/file.$num && echo “/tmp/file.$num create successful”
done

三、if语句

if语法:

if语法

#!/bin/bash
DIR=”/tmp/redhat/data”
if  [ -f  “$DIR” ]; then
    mv $DIR $DIR_bak
    mkdir $DIR
elif  [ -d “$DIR” ]; then
    for FILES in $(find /etc/  -name "*.txt")
    do
        cp -r $FILES $DIR && echo "$FILES copy successful"
    done
else
    mkdir  -p $DIR
fi

if判断

四、退出状态

1、$?判断上一次命令执行结果是否为真
0为真,即运行成功
1-255为假,即运行失败
一般运用 echo $? 将上一个命令执行结果状态打印至屏幕

2、COMMAND1 && COMMAND2 当命令1执行成功时则执行命令2
COMMAND1 || COMMAND2 当命令1执行失败时则执行命令2

3、人工赋值:将命令执行结果和exit返回值结果用{}括起来
exit人工赋值

五、TEST语句

test命令

使用中括号[]作为test命令作用于检查文件类型和比较值时,[ ]左右均需要添加空格,=左右也需要空格 ,否则将会视为赋值处理

1、表达式判断

(表达式) 判断表达式是否为真
!() 判断表达式是否不为真
表达式1 -a 表达式2 判断两个表达式是否都为真
表达式1 -o 表达式2 判断两个表达式是否有一个为真
-n STRING 判断字符串长度是否为非0
-z STRING 判断字符串长度是否为0
STRING1 = STRING2 两字符串是否相等
STRING1 != STRING2 两字符串是否不相等

2、INT判断

INT1 -eq INT2 判断两整型是否相等
INT1 -ge INT2 判断INT1是否大于或等于INT2
INT1 -gt INT2 判断INT1是否大于INT2
INT1 -le INT2 判断INT1是否小于或等于INT2
INT1 -lt INT2 判断INT1是否小于INT2
INT1 -ne INT2 判断两整型是否不相等

3、文件判断

FILE1 -ef FILE2 判断两文件是否有相同的设备号
FILE1 -nt FILE2 判断文件1是否比文件2新
FILE1 -ot FILE2 判断文件1是否比文件2旧

4、其他判断

-f 判断文件是否存在
-d判断文件夹是否存在
-x判断文件是否存在且是否可操作
-r判 断文件是否存在且是否可读取
-w判断文件是否存在且是否可写入

六、其他内容

1、passwd - -stdin(利用标准输入设置密码)

echo $USERS | passwd  - -stdin $USERS

2、openssl rand -base64 6(密码长度)
随机生成6位数密码
随机生成密码、发送邮件
3、语法:TEST=$(命令)
意义:将命令执行的结果作为值传递给变量
4、ping检测语句

ping -c1 172.25.254.1-10

5、pidof SERVERNAME
查看服务的进程ID

最后修改:2020 年 10 月 28 日
分享是对我最大的赞赏