Linux系统Shell脚本编程

1. shell脚本概念:

C语言编写的、命令解释器、编程语言。

是用户使用linux的桥梁。

非常擅长处理文本类型的数据。

 

2. shell脚本作用:

自动化管理、监控管理、日志数据处理、自动数据备份。

 

3. shell脚本中的成分:

注释、命令、shell变量、结构控制语句。

以行为单位,一行一行依次执行。

shell脚本中可以出现任何在交互方式下可以使用的命令。

 

4. 调用shell脚本的两种方式:

1sh 脚本文件名

2./脚本文件名(需要有执行权限)

当执行一个脚本文件时shell会产生一个子shell(即一个子进程)去执行脚本文件中的命令。

 

5. Shell脚本编码规范:

一个bash脚本的正确的起始部分应该以#!开头,如:#/bin/bash。在调用bash脚本的时候,以#!开头的语句通知系统使用何种解释器来执行脚本。

 

6. shell变量:

shell变量用于表示字符串、数值。

 命名规范:

1)首个字符必须为字母(a-zA-Z) 或者_

2)中间不能有空格,可以使用下划线(_);

3)不能使用其他标点符号。

变量赋值:变量名=值(赋值符号“=”两边不能有空格,否则将视为命令。)

注:shell的默认赋值是字符串赋值,要进行数字赋值要加“(( ))”。

引用变量的值:在变量名前面加一个“$”。

注:变量赋值的时候一定不能在前面加“$”。

  示例:

  v1=centos

  echo $v1

  为避免变量名和其他字符混淆要给变量名加上“{}”。

  示例:

  num=2

  echo “This is the ${num}nd”

 

7. 数字的运算:

   shell数值运算都是通过(( ))来计算的。

   幂运算表示:**

   示例:

   a=10

   b=20

   echo $(($a+$b))

   关系比较运算如果出现在中括号中则要使用-eq-ne-gt-ge-lt-le等代替。

 

8. shell变量表达式:

  ${#string}:计算字符串的长度。

  ${stringposition}:从位置position开始提取字符串。

  ${stringpositionlength}:从位置position开始提取长度为length的子串。

  ${string#substring}:从开头删除最短匹配子串。

  ${string##substring}:从开头删除最长匹配子串。

  ${string%substring}:从结尾删除最短匹配子串。

  ${string%%substring}:从结尾删除最长匹配子串。

  使用实例:

  ${string#I*.}:删除I.的所有字符(最短匹配)。

  ${string##I*.}:删除I.的所有字符(最长匹配)。

 

9. 判断:

  (1)test

          -f:文件是否存在

          -d:目录是否存在

          -r:文件是否有读权限

          -w:文件是否有写权限

          -x:文件是否有执行权限

          -n:判断变量是否有值

          -z:测试字符串是否为空串

      示例:

      filename=/home/wjt

      test -f $filename && echo ‘exit’ || echo ‘not exit’

 

  (2)[ ]

       在中括号中必须都要使用空格来分隔

       在中括号中的变量最好都要以双引号括起来

       在中括号中的常量最好都以单引号括起来

      示例:

       [ “$a” == ”$b” ] && echo ‘yes’ || echo ‘no’

       [ ‘12’ == ’10’ ]

 

  (3)if-else多分支判断:

       示例:

       echo ‘Please input your hardware

       read hd

       if [ $hd == cpu ]; then

           echo ‘Your cpu info is

           cat /proc/cpuinfo

       elif [ $hd == mem ]; then

           echo ‘Your memory info is

           cat /proc/meminfo

       elif [ $hd == hard ]; then

           echo ‘Your harddisk info is

           df -h

       else

           echo ‘Wrong input’

       fi

 

  (4)case多分支判断:

       示例:

       echo ‘Please input an number’

       read number

       case $number in

       1)

          echo ‘Your input number is 1’;;

       2)

          echo ‘Your input number is 2’;;

       3)

          echo ‘Your input number is 3’;;

       *)

          echo ‘Wrong input’;;

       esac

 

  (5)select语句:让用户从一组不同的值中选择一个。

       select表达式是bash的一种扩展应用,用于交互式场合。

       示例:

       #!/bin/bash

       echo “Select a kind of fruit as your favorite:”

       select fruit in “apple” “banana” “persimmon”; do

           break;

       done;

       echo “Your favorite fruit is $fruit!”

 

10. 循环操作:

   (1)while

        示例:

        i=10

        while (($i>5)); do

            echo $i;

            ((i--));

        done;

 

   (2)until

        示例:

        a=10

        until [ $a -lt 0 ]; do 

            echo $a;

            ((a--));

        done;

 

3)for

     示例:

     for((i=1;i<10;i++)); do

         echo $i;

     done;

注:while循环和until循环的区别:while循环在条件成立时执行;而until循环则在条件不成立时执行。

 

11. 函数(方法):

   示例:

   #!/bin/bash

   function print()

   {

        echo “The number you input is $1”;

   }

   echo “Please input your number:”

   read number;

   case $number in

   “one”)

print 1;;

“two”)

print 2;;

“three”)

    print 3;;

*)

echo ‘wrong input’;;

esac

 

12. 引号:

在向程序传递任何参数之前,程序会扩展通配符和变量,即程序会把通配符替换成适当的文件名,把变量替换成变量值。使用引号可以防止这种扩展。单引号和双引号都可以防止通配符“*”的扩展。双引号允许变量扩展,而单引号则可以防止变量扩展。此外还可以使用转义字符“\”来防止通配符和变量名的扩展。

 

13. Here Document

Here document用于将几行文字传递给一个命令。

Here document以“<<”开头,后面接上一个字符串,这个字符串还必须出现在here document的末尾,中间则是要传递给命令的文字。

示例:

#!/bin/bash

#This programe receives three numbers and output the biggest one.

If [ $# -ne 3 ];  then

cat << HELP

This command requires three params.

Usage example: biggest 1 2 3.

HELP

  exit 0

fi

a=”$1”

b=”$2”

c=”$3”

shift

shift

shift

if [ $a -gt $b ]; then

    bigger=$a

else

    bigger=$b

fi

if [ $bigger -gt $c ]; then

    biggest=$bigger

else

    biggest=$c

fi

echo $biggest

 

14. 命令行参数:

   用户从命令行输入的参数可以在shell脚本中访问。

   $#:表示参数个数

   $@:表示所有参数列表

   $*:表示所有单数列表

   $n:表示第n个参数

   $0:当前脚本的文件名

 

posted @ 2015-09-01 00:01  疯一样的狼人  阅读(408)  评论(0编辑  收藏  举报