shell 自动化运维

1、shell 基础知识

1). shell是一个程序,文件路径:/bin/bash,是一个命令解释器,所有的linux命令都由它来执行

      打开终端,就进入了shell交互式命令

       2). shell脚本

              后缀为.sh的就是我们所谓的shell脚本文件

      tab键没有意义,仅仅是为了美观
              单行注释键:       #    (首行的#不是注释)

       多行注释:     :<<! ... !  

#!/bin/bash

echo 'hello world'

echo 'pen'

:<<!
echo 'book'
!

echo 'phone'

        3). 脚本执行方式

    1、bash hello.sh   或    /bin/bash hello.sh(推荐)

    2、当前路径下执行脚本    ./hello.sh

    3、source hello.sh      或  .   hello.sh

    说明:

        方式1.脚本文件本身没有可执行权限或者脚本首行没有命令解释器时使用的方法,我们推荐用bash执行。

        方式2.脚本文件具有可执行权限时使用;  添加执行权限: chmod + x  脚本名

        方式3. source命令和.命令 通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录

         区别:source不会开启新的进程执行脚本,可以跟当前窗口共享进程,共享变量; 其他两种都会开新的进程

《脚本开发规范:》

       1.  脚本命名要有意义,文件后缀是.sh

       2.  脚本文件首行是而且必须是脚本解释器    #!/bin/bash

       3.  脚本文件常见执行方式:bash 脚本名

       4.  脚本内容执行:从上到下,依次执行

       5.  代码书写

             1)   成对内容的一次性写出来,防止遗漏。  如:()、{}、[]、''、``、""

             2)   []中括号两端要有空格,书写时即可留出空格[    ],然后再退格书写内容。

             3)   流程控制语句一次性书写完,再添加内容

         4). 变量

      1.本地变量 (在当前系统的某个环境下才能生效的变量,作用范围小。)

           3种方式赋值

            1、name=laowang      (等号两边不需要加空格,否则会报错n)
                   2、name='name is $name'  不会解析引号中的变量
                   3、name="name is $name"  会解析引号中的变量

                 习惯: 数字不加引号,其他默认加双引号

                  echo $name         ($变量名 , 输出时,变量前面需要加上 ‘$’ 符号 )

       2. 命令变量

                    执行命令,把命令返回的结果交给变量

                    1、name=`pwd`                (``  这两个为反引号,shift +`  )

                    2、name=$(pwd)

               3. 全局变量( 在当前系统的所有环境下都能生效的变量 )

                     查看全局变量命令:

                             env               只显示全局变量

                             env | grep SHELL    (grep 过滤)

                     1、name="wang"

                           export name

                           env | grep name

                     2、export age=123  (最常用)

                     export 这种方式,变量的作用范围是当前窗口及子进程


                    #如果想让全局变量永久生效,并且任何一个窗口都有效,需要修改文件/etc/profile
                    export age=123,重新启动系统

          

                4. 使用变量

                   1、 $变量名                 echo $name
                   2、echo "$name"
                   3、echo ${name}
                   4、"${变量名}"         echo "${name}"         -- 这个是最规范的

                         ##   $变量名 与  "$变量名"是一致的,说明 双引号对变量的引用没有影响。

               5.删除变量

                          unset 变量名                   unset name

               6.   shell 内置变量

              $0  获取当前执行的脚本文件名称, 包括脚本路径
                      $n  $1...$9 获取第几个参数,如果n>9,需要${10}
                      $#  获取当前shell命令行中参数的总个数

               echo  $?  返回上一条命令的结果,0代表上一条命令执行成功,非0是失败

               说明: 如果上一条命令时运行一个脚本,$?返回的上脚本中的最后一行命令的结果

# 示例:      
      1 #!/bin/bash
      2 
      3 #$0 表示脚本的名称
      4 echo "脚本的名称为:$0"
      5 
      6 #$n 表示接受脚本传入的参数
      7 echo "脚本参数1:$1"
      8 echo "脚本参数2:$2"
      9 echo "脚本参数3:$3"
     10 
     11 # $# 表示传入参数的个数
     12 echo "脚本参数个数: $#"



# 执行:

    [root@VM-0-12-centos shell_operation]# bash test01.sh one two three
    脚本的名称为:test01.sh
    脚本参数1:one
    脚本参数2:two
    脚本参数3:three
    脚本参数个数: 3
    [root@VM-0-12-centos shell_operation]# echo $?
    0
    [root@VM-0-12-centos shell_operation]# 

                 7. 字符串精确截取
                     格式:${变量名:起始位置:截取长度}

[root@VM-0-12-centos shell_operation]# name="abcdef"
[root@VM-0-12-centos shell_operation]# echo ${name:0:2}
ab

                    示例:
                       ${file:0:5}        从第1个字符开始,截取5个字符
                       ${file::5}        从第1个字符开始,截取5个字符
                       ${file:5:5}        从第6个字符开始,截取5个字符
                       ${file:5}            从第6个字符开始,截取后面所有的字符
                      ${file:0-5}        从倒数第5个字符开始,截取后面所有的字符
                      ${file:0-6:3}        从倒数第6个字符开始,截取之后的3个

                 8. 默认值

                     方式一: ${变量名:-默认值}

                             echo ${name:-123}  如果name有值,就不采用默认值,如果name没有值,就采用默认值

                      方式二:  ${变量名+默认值}                 无论变量a是否有内容,都输出默认值

                             echo ${name+123}   无论name是否有值,都采用默认值。 

                             (测试发现,变量需要先赋值,默认值才生效,否则为空)

2、shell 进阶   

         1)表达式

                      1. 测试语句  —— 用 $? 来判断是否执行成功,0:表示成功;   1: 表示失败

                          1). 等号左右必须有空格

                                    test 1 = 1

                          2). [ ] 括号左右都需要空格,两个比较的值之间必须要有空格 --  这个比较常用
                                    [ 1 = 2 ]


                       2. 表达式分类 -- 逻辑表达式

                            常见的逻

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值