shell编程(上)

一、shell是什么

• shell是一种脚本语言   blog.lishiming.net

• 可以使用逻辑判断、循环等语法

• 可以自定义函数

• shell是系统命令的集合

• shell脚本可以实现自动化运维,能大大增加我们的运维效率

 

二、shell脚本结构和执行方法

• 开头需要加#!/bin/bash

• 以#开头的行作为解释说明

• 脚本的名字以.sh结尾,用于区分这是一个shell脚本

• 执行方法有两种

• chmod +x 1.sh; ./1.sh

• bash 1.sh

• 查看脚本执行过程 bash -x 1.sh

• 查看脚本是否语法错误  bash -n 1.sh

 

三、date命令的用法

date    //显示系统当前的日期和时间

d4c6d49dba6911fdf31927e6403a9a280da.jpg

date +%Y             //显示年,四位数

date +%y              //显示年,两位数

edfa963821ffb57c998a8076b32d10d92ce.jpg

date +%m         //显示月

ae5c44865f8f01521efb84393e6ad8260aa.jpg

date +%M       //显示分钟

edfa963821ffb57c998a8076b32d10d92ce.jpg

date +%d       //显示日期

61b51eb1bd128ccd9d2d1edeeed7897f2bc.jpg

date +%D       //显示月日年

ddbcfeb74d04dc93f86867ea06e9f22dab5.jpg

date +%Y%m%d           //显示年月日

date +%F                       //显示年月日

b07b289ef1fe3d6a8aaaaaa6e8ea74bb2df.jpg

date +%H       //显示小时

ac37ad8afcc7c229d5406b331649ac0af82.jpg

date +%S          //显示秒

9358e563c747f29e4db7b953440466722f8.jpg

 

date +%T                        //显示时间

date +%H:%M:%S            //显示时间

da7efc3ff089a050dc49bd05ce065d2e1e9.jpg

date +%w         //显示星期

f94722d303eb8a2193b1716f8ad54b1fcb5.jpg

 

date +%W      //显示今年的第几周

43f6579e0e5179677340e2f964266bc97f4.jpg

cal          //显示日历的格式

47190609f94b00c7c12662f972c8850055c.jpg

date -d "-1 day"             //显示一天前的日期

95e7977a98823eddb007a170b56bcd4057b.jpg

date -d "-1 day" +%F           //显示前一天日期

86dc8f255c1aaf207be4162c6886a7d2ad6.jpg

date -d "-1 month" +%F      //显示前一个月的日期

b3aae5a7710529107ae6920753cc7f35c1e.jpg

date -d "-1 year" +%F       //显示前一年的日期

c95ff91220920e1f138647c5cd566e0aac1.jpg

date -d "-1 hour" +%T       //显示一个小时前的时间

1494963d80612a908f87def17e248803710.jpg

date -d "-1 min"          //一分钟前

a57578097a07ce5619a8e82de58621724ec.jpg

date +%s         //显示时间戳

date -d @1547085141         //显示时间戳的时间

d5177d2b27a2a21d5a800f1e7b2534ea890.jpg

date +%s -d "2019-01-10 09:52:21"          //具体日期换算成时间戳

aba083771503b644445b188cfbfa9c2a4e5.jpg

 

 

四、shell脚本中的变量

• 当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替

• 使用条件语句时,常使用变量    if [ $a -gt 1 ]; then ... ; fi

• 引用某个命令的结果时,用变量替代   n=`wc -l 1.txt`

• 写和用户交互的脚本时,变量也是必不可少的  read -p "Input a number: " n; echo $n   如果没写这个n,可以直接使用$REPLY

• 内置变量 $0, $1, $2…    $0表示脚本本身,$1 第一个参数,$2 第二个 ....       $#表示参数个数

• 数学运算a=1;b=2; c=$(($a+$b))或者$[$a+$b]

 

 

五、shell中的逻辑判断

• 格式1:if 条件 ; then 语句; fi

用命令行模式执行

7a708e632e68d42c63abe9cd263783aaba8.jpg

脚本执行模式

41ad1a56fff91734c8cc5dc5bbb61f358dd.jpg

 

• 格式2:if 条件; then 语句; else 语句; fi

16d47c0ce9ef228186526ac53aa30946fcd.jpg

 

 

• 格式3:if …; then … ;elif …; then …; else …; fi

2a2864d8f70fdd936d54b7e361323ef5907.jpg

 

• 逻辑判断表达式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等 ,注意到处都是空格

-gt:大于(>)                  -ge:大于等于(>=)

-lt:小于(<)                   -le:小于等于(<=)

-eq:等于(==)              -ne:不等于(!=)

01794524e15ba7712791a07252d040d8ad5.jpg

 

• 可以使用 && || 结合多个条件

&&:并且

||:或者

• if [ $a -gt 5 ] && [ $a -lt 10 ]; then

• if [ $b -gt 5 ] || [ $b -lt 3 ]; then

 

 

六、if 判断文件、目录属性

• [ -f file ]判断是否是普通文件,且存在

dbf38a4ab3e975bc1ccd0e92b3decf9151e.jpg

9d4e1904ad5e69aa30b683515edbb34f299.jpg

 

• [ -d file ] 判断是否是目录,且存在

1293b0cdbecfa4b7dc6ff0ba3ba1113c3ef.jpg

 

• [ -e file ] 判断文件或目录是否存在

c0ab94e422a85c3df4c297fc2aadeb709f1.jpg

目录和文件都可以使用touch

如果文件或目录不存在,touch会创建一个文件

如果文件或目录存在,touch会改变文件的atime、mtime、ctime

 

• [ -r file ] 判断文件是否可读

2627c668e577a2c5a6e887a1343539e2442.jpg

 

• [ -w file ] 判断文件是否可写

1b94026091ebc353580660319f8803d75df.jpg

 

• [ -x file ] 判断文件是否可执行

897842eab8a23fb9056b5821b95ee44ebe6.jpg

 

判断文件是否存在,存在就删除该文件

efea748866e81bea2b4d7a47f02a21655d5.jpg

等同于

2609a77e31bdc3b70366d036b78a48a778c.jpg

 

当这个文件不存在,才会执行后面这条命令

03c6bb5dcf5b3de1065bd67cd39e5f2ef57.jpg

等同于

bba04dddebf6363475d1f8f0b5c067e6d82.jpg

 

七、if判断的一些特殊用法

• if [ -z "$a" ]  这个表示当变量a的值为空时会怎么样

 

判断一个文件的行数,如果文件不存在,或者没数值,执行脚本会报错

246e72df9b859017e81ec4eb6c317148d92.jpg

此时就需要嵌套一个逻辑判断

76b99750e37219f8370a030fc9d4dc1fc37.jpg

等同于

4eae0454fb97ed6ab9138cec6b0566ec9b2.jpg

完整的脚本

2180cab699309a17f7020b5f4fce0abc010.jpg

 

 

• if [ -n "$a" ] 表示当变量a的值不为空

变量需要双引号,文件不需要

可以判断一个文件是否不为空

f62b703da5cc8dfdfdd7ef471782364a305.jpg

判断一个变量是否为空

0f5471c3314b01430abb9f9f11f48b5a560.jpg

 

• if grep -q '123' 1.txt; then  表示如果1.txt中含有'123'的行时会怎么样

判断某一个文件中是否包含哪些字符串(例:判断系统用户是否有user1)

27c242667295d9762286cc4e4113257b286.jpg

判断如果用户存在,则输出user1 exist

eb91868c32504a19067c109ccb74387852b.jpg

 

如果user1不存在,则创建user1

ca1420ea72c29afb91bd836f97ba15cb886.jpg

 

• if [ ! -e file ]; then 表示文件不存在时会怎么样

• if (($a<1)); then …等同于 if [ $a -lt 1 ]; then…

• [ ] 中不能使用<,>,==,!=,>=,<=这样的符号

 

八、shell中的case判断

• 格式 case  变量名 in

                     value1)

                          command

                          ;;

                     value2)

                          command

                          ;;

                      *)

                        commond

                            ;;

                      esac

•在case程序中,可以在条件中使用|,表示或的意思, 比如    

2|3)

    command

    ;;

 

read -p的用法

52a6ed48dc80d18f584d01c8a2ffd0c59e7.jpg

 

shell脚本案例

ea81ed26f51e6b43cd5a867d064c759f196.jpg

 

测试

fcf914db0cefa0ad7d331a590b526753a76.jpg

 

九、for循环

• 语法:for 变量名 in 条件; do …; done

打印出1到100

7189e7685afe338a746d12895eb95a4b2ff.jpg

• 案例1,求出1到100的和

7597d62ab7b089b67f3683a6dc8d9a4d6bd.jpg

 

 

案例2,文件列表循环

列出/etc/底下的所有目录

2cc26cceca9ade8c44b21834676cb27cfe8.jpg

 

for循环中的对象

749154018a21db49dadcdd439715da135e6.jpg

 

for循环,命令形式默认会将空格或者回车作为分隔符

a07ad02ba75ad59773d94c4b26a731b6f55.jpg

 

 

十、while循环

• 语法 while 条件; do … ; done

14e7186f132bd8dc35ee3b9a0b7ca476554.jpg

 

fab40c9df4fe3c39e0239d0f0352e8e3704.jpg

 

9bf47f6bd137e7d97ab3887b6aab9b999fc.jpg

 

090c91fa2bb18b1f8eb98391a2c0c789ee3.jpg

 

5edc5ac49a74b1c965fc3a0fb1b0c126850.jpg

 

每隔30秒检查系统的负载,当系统的负载大于10的时候就发一份邮件

aab0869ea418c5a12b6a5e00456540d8508.jpg

 

执行脚本,休眠30秒检查一次

cb1febc69878666e72165933cb424021940.jpg

 

while循环案例2

b3374453e18bace6a9ac5f59c113d3275a4.jpg

 

 

 

十一、break跳出循环

26a484d91a5e221bd9003f42af0dd26b78c.jpg

 

 

 

十二、continue结束本次循环

ce8df1489fb4ac632fc797922d43e98276a.jpg

 

 

十三、exit直接退出脚本

3bf25fe57f3eb530c94d0f19a42a64dcfd9.jpg

 

转载于:https://my.oschina.net/u/3991860/blog/3001066

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值