centos中的脚本学习

1、shell脚本

         是一些命令及表达式的集合,也是一种程序设计语言,用于高效率的完成任务,简单理解为批量的执行一些命令。

     (1)脚本基本格式    vim 文件名.sh

         #!/bin/bash     #!说明使用哪种解释器来执行脚本            #注释信息      #开头为注释

         命令1

         命令2

         ……

         命令n

     (2)运行方式:

              /bin/bash 文件名.sh    bash解释器来运行

              ./文件名.sh      输入完整路径来运行,此方法必须有脚本的运行权限才可执行。

              增加运行权限: chmod u+x  文件名.sh

     (3)内设的接收参数变量

         例子# test.sh one two three four five

         $0 文件名本身,$*所有参数值,$1 第一个参数

         $2 第二个参数  $3第三个参数 $n 第n个参数

         $#参数总数

         例子# test.sh one two three four five

         $0 的值是test.sh    $1是one  $2是two

         $*的值是one two three four five

         $#的值是5  参数总数

2、变量

         (1)定义变量   定义变量时变量名前不需要加$

                   变量名=变量值    

                   例子   num=2   

                   注意:变量名首字符不能是数字,

                            变量名和等号之间不能有空格

           (2)使用变量  使用变量时要再变量名前加$

                       echo $num

               (3)    只读变量    readonly定义的变量

                       例子    readonly num=5

               (4)    删除变量   unset

                       格式: unset 变量名

                       例子   myurl="http://www.baidu.com"

                                     unset myurl

                      注意:变量被删除后不能被使用

                                     unset不能删除只读变量

         (5)变量类型

                       局部变量   只在此脚本使用

                       环境变量     所有程序可使用

                       shell变量  shell设置的特殊变量,

                       shell变量一部分是环境变量一部分是局部变量。

         (6)shell字符串   常用数据类型

         单引号 内部的任何字符都会原样输出,内部变量无效

              字符串中不能单独出现一个单引号(对单引号使用转义字符后也不行),但可以成对出现,作为字符串拼接使用。

双引号 双引号里可以有变量,可以有转义字符

例子:

         your_name="runoob"

        # 使用双引号拼接

        greeting="hello, "$your_name" !"

        greeting_1="hello, ${your_name} !"

        echo $greeting  $greeting_1

        # 使用单引号拼接

        greeting_2='hello, '$your_name' !'

        greeting_3='hello, ${your_name} !'

        echo $greeting_2  $greeting_3

(7)获取字符串长度

         string="abcd"

         echo ${#string}     输出4

(8)提取子字符串

         string ="It's a book"

         echo ${string:1:4}   输出 t's

    注意:第一个字符的索引值是0

(9)查找字符在字符串位置

      string="runoob is a great site"

        echo `expr index "$string" io`  # 输出 4

` 是反引号,而不是单引号 ',不要看错了哦。

3、Shell 数组

bash支持一维数组(不支持多维数组),数组元素的下标由 0 开始编号

在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:

数组名=(值1 值2 ... 值n)

还可以单独定义数组的各个分量:

array_name[0]=value0

array_name[1]=value1

array_name[n]=valuen

可以不使用连续的下标,而且下标的范围没有限制。

读取数组

${数组名[下标]}

使用 @ 符号可以获取数组中的所有元素

echo ${array_name[@]}

获取数组的长度

# 取得数组元素的个数

length=${#array_name[@]}

# 或者

length=${#array_name[*]}

# 取得数组单个元素的长度

lengthn=${#array_name[n]}

4、Shell 注释

以 # 开头的行就是注释,会被解释器忽略。

多行注释

多行注释还可以使用以下格式:

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

:<<'

注释内容...

注释内容...

注释内容...

'

:<<!

注释内容...

注释内容...

注释内容...

!

5、流程控制   顺序、选择、循环

(1)文件测试所用参数

         -d测试文件是否为目录

         -e测试文件是否存在

         -f判断是否为普通文件

         -r是否有读权限

         -w是否有写权限

         -x是否有执行权限

         例子:

                   # [ -d /etc/fstab ]  

                   echo $?    前一个命令的值,结果为1,表示不是目录。

(2)逻辑 与、或、非

         逻辑与  &&   表示前面真后,才执行候命语句

                     例子:  [ -d /etc/fstab ] && echo "Exist"

              逻辑或 ||  前面失败后才会执行后面

              逻辑非   !  取反

     (3)整数比较运算符

                   -eq是否等于

                            -ne是否不等于

                            -gt是否大于

                            -lt 是否小于

                            -le 是否小于等于

                            -ge是否大于等于

(4)条件语句 1

       if [条件 ]

              then

                     语句

              fi

(5)条件语句2

           if [条件 ]

              then

                     语句

              else

                     语句

              fi

(6)条件语句3

           if [条件 ]

              then

                     语句

              elif [条件 ]

                     语句

              else

                     语句

              fi

(6)for循环

         for变量名 in 取值列表

         do

              命令序列

         done

(7)while循环

         while 条件测试

         do

            命令序列

         done

(8)case条件

     case变量值 in

         模式1)

              命令序列1

              ;;

         模式2)

              命令序列2

              ;;

         模式3)

              命令序列3

              ;;

         模式n)

              命令序列n

              ;;

         esac

        

(9)read命令   从标准设备读取(输入)信息

     -p参数后可以写提示信息

     例子   

              vim test.sh

              !/bin/bash

              read -p "请输入一个数值:" num

              echo "你输入的数值是:" $num

(10) &>/dev/null

   表示不显示没必要的信息

(11) 字符串比较运算符

         = 等于    != 不等于   -z 是否为空

(12)综合例子  读取文件中的用户名进行用户创建工作               需要root用户权限

              users.txt文件内容为:

                       wlb11

                       wlb22

                       wlb33

             

              vim UseraddTest.sh

         #!/bin/bash

         for UNAMEin `cat users.txt`

         do

           echo "现在从文件中读取的用户是:"$UNAME

           id $UNAME &> /dev/null

           if [ $? -eq 0 ]

           then

                   echo $UNAME"用户已经存在"

           else

                  read -p "请输入用户:"$UNAME"的密码" PASSWD

                  useradd $UNAME &> /dev/null

                  echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null

                   if [ $? -eq 0 ]

                  then

                          echo "$UNAME,成功建立用户"

                  else

                          echo "$UNMAE, 建立用户失败"

                  fi

          fi

      done                            

        

注意事项:

         $? -eq 0     测试上个命令的运行情况,0为成功

         &> /dev/null  输出到空的地方,也就是不输出信息

              --stdin           获取字符串(数据),echo的输出为passwd的输入

       `cat users.txt`   `是反引号,执行反引号内的命令


版权声明:本文为m0_47314098原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。