zoukankan      html  css  js  c++  java
  • 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:当前脚本的文件名

     

  • 相关阅读:
    [二叉树算法]关于层次遍历二叉树的一些算法总结
    数据库事务并发访问产生的问题及四种事务隔离级别
    当relative遇上z-index,阻断事件捕获
    关于CAS操作
    LRU算法与LRUCache
    Hadoop2.x 关于日志文件位置
    推荐系统架构图——我的软件工程概论课设
    文件上传+解析漏洞
    命令执行漏洞
    SSRF漏洞
  • 原文地址:https://www.cnblogs.com/wujuntian/p/4774686.html
Copyright © 2011-2022 走看看