专栏首页ASFORLinux基础学习(八)Shell脚本

Linux基础学习(八)Shell脚本

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语法:

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

四、退出状态

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

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

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

五、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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • OpenStack环境搭建1(先电版)

    OpenStack先电版搭建系列教程由五部分组成,该部分为第一步环境搭建步骤,其他部分请在本站查找相关内容

    Weiyang
  • Typecho小程序详细教程(三)个性定制

    注意:此处可直接在解压出来的目录中进行图片的替换和修改,建议将整个images目录备份后再进行操作,修改后的图片名称需与原文件名称保持一致(如,修改home图标...

    Weiyang
  • KVM系列教程(一)安装KVM

    本实验环境采用VMware WorkStation 15及RHEL 7.3镜像部署安装。

    Weiyang
  • 右旋方阵

    lop
  • Python循环控制之for

    各位小伙伴们 大家周三愉快 今天我们要来共同探讨 另外一个在Python中 (严格的说实在所有语言中) 最重要的语句之一 For()循环控制语句 技术要点: f...

    企鹅号小编
  • 输入行列的值,打印出左手旋转矩阵。

    问题描述 输入行列的值,打印出左手旋转矩阵。 输入格式 输入一行,不超过20的m,n表示矩阵的行和列 。 样例输入 4 3 样例输出 1    2  ...

    lop
  • 51单片机矩阵键盘C程序

    由键盘输入一个3×4矩阵a,选出各列最小的元素组成一个一维数组b并输出 由键盘输入一个3×4矩阵a,选出各列最小的元素组成一个一维数组b并输出

    Vance大飞
  • 微信小程序|列表渲染-for循环

    大家学习程序设计都知道for循环,而且很多编程都需要用到for循环。在制作微信小程序特别是列表页面的时候,是否有遇到过列表元素很多或者不确定的情况,如果一个一个...

    算法与编程之美
  • 【最新】人工智能领域顶会AAAI 2018 Pre-Proceedings 论文列表(附pdf下载链接)

    【导读】人工智能领域顶尖学术会议 AAAI 2018,暨第32届 AAAI 大会将于 2 月 2 日 - 2 月 7 日 在新奥尔良举行。AAAI 是由人工智能...

    WZEARW
  • Python之推导式

    py3study

扫码关注云+社区

领取腾讯云代金券