前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux基础学习(八)Shell脚本

Linux基础学习(八)Shell脚本

作者头像
Weiyang
发布2020-04-20 16:58:38
1.3K0
发布2020-04-20 16:58:38
举报
文章被收录于专栏:九思学舍九思学舍九思学舍

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语法
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判断
if判断

四、退出状态

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

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

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

exit人工赋值
exit人工赋值

五、TEST语句

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、脚本规则
    • 1、文件名
      • 2、内容声明
        • 3、变量$符
          • 4、引号
          • 二、for循环
            • 语法:
              • for语句:
                • 例子1:
                  • 例子2:
                  • 三、if语句
                    • if语法:
                      • 使用中括号[]作为test命令作用于检查文件类型和比较值时,[ ]左右均需要添加空格,=左右也需要空格 ,否则将会视为赋值处理
                  • 四、退出状态
                  • 五、TEST语句
                    • 1、表达式判断
                      • 2、INT判断
                        • 3、文件判断
                          • 4、其他判断
                          • 六、其他内容
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档