• Shell编程


    首先来看一个例子

    #! /bin/sh

    a=5

    b=3

    echo a=$a

    echo b=$b

    if (test “$a” = “$b”) then

      echo a=b

    else

      echo a!=b

    fi

    第一行前面的“#”号不是注释,“#!”而且出现在第一行代表通知系统用/bin/sh来执行下面的程序。

    以“#”开头的行代表注释。
    字符串前面加”$”代表它是一个变量,
      –如果”$”后面是数字,代表第几个参数
      –$1代表第一个参数,$2代表第二个参数,$0代表命令本身
    参数详细说明

    参数

    说明

    $i

    代表第i个参数

    $#

    代表参数个数

    $*

    代表所有参数

    $?

    上一个命令的返回值

    $i例子

    #! /bin/sh

    echo $#

    echo $1

    echo $*

    shift语句。
    $i只能提供0到9这10个数据参数,那么超过10个

    怎么办呢?

    shift能使引用数移位,如此就可以将引用过的引数移掉,把位置留给下一个引数。

    echo $# $*

    shift

    echo $# $* 

    以“` `”符号包含的内容不是字符串,而是代表这是一个shell 命令。

    echo “today is” `date`

    前面是字符,后面`date`表示执行date这个命令。

    PDATE=`date`

    代表定义一个变量PDATE,将date执行完成输出的结果放入变量 PDATE中。
     
     
    “expr”是用来取计算的结果。

    a=9

    b=10

    var1=$a+$b

    echo $var1

    输出结果是”9+10”

    “expr”是用来取计算的结果。

    var1=`expr $a + $b`

    注意:“+”前后都需要有空格
     
     
     
    read命令用于从终端或文件读取输入。
    read命令读取一个输入行,直至遇到换行符。
    行尾的换行符在读入时将被转换成一个空字符。
    如果read命令后有变量名,输入内容赋给该变量,如果read命令后未跟变量名,读入的行将被赋值给内置变量REPLY。
     
     
     
     
    read例子

     #! /bin/sh

    read a

    read b

    var1=`expr $a + $b`

    echo $var1

    第一种if条件语句。

    if (test condition) then

      commands

    else

      commands

    fi

    if条件语句中test是一个固定关键字,用来判断condition的描述是否正确,正确继续执行下面语句,错误执行else后面语句。
    fi表示if语句结束。
     
     
    第一种if条件语句例子。

    #! /bin/sh

    if (test “$1” = “start”) then

      echo “is start”

    else

      echo “is nothing”

    fi

    第二种if条件语句。

    if [ -option expr ]; then

      commands

    else

      commands

    fi

    不同的条件代表不同的判断方式。
    例如 if [ -r file ];,”[””]”里面都要加上空格,”]”后面要加”;”号。
     
     
    -option说明

    option

    说明

    -d file

    文件存在并且是个目录

    -e file

    文件存在

    -r file

    文件存在并且可读

    -w file

    文件存在并且可写

    -x file

    文件存在并且可执行

    第二种if条件语句例子。

    #! /bin/sh

    if [ -f abc.c ]; then

      echo “have abc.c”

    else

      echo “have not abc.c”

    fi

    while循环语句。

    while [ expr ];

    do

      commands

    done

    expr为真的时候,while循环一直下去,直到expr为假。
     
     
    while语句例子。

    #! /bin/sh

    times=0

    while [ "$times" != "5" ];

    do

            echo $times

            times=$[$times + 1]

    done

    case分支条件语句。

    case “string” in

    pattern_1)

      commands

    ;;

    pattern_2)

      commands

    ;;

    *)

      commands

    ;;

    esac

    当条件语句中的 string等于pattern字符串时执行pattern下面命令。
    当没有符合条件时,最后执行*)。
     
     
    case语句例子。

    #! /bin/sh

    case "$1" in

    start)

            echo "is start"

            ;;

    stop)

            echo "is stop"

            ;;

    *)

            echo "is nothing"

    esac

    for循环语句。

    for varname in list ;

    do

      commands

    done

    list可以是一个字符串或数字
    for每执行一次循环就将varname指定为list中的一个值,直到list这个数组结束。
     
     
    for语句例子。

    #! /bin/sh

    sun=0

    for i in 1 2 3 4 5;

    do

            sum=$[$sum + i]

            echo $sum

    done

    exit语句。

    exit code

    exit可以让一个shell退出,与C语言的exit函数类似。
     
    :语句。

    :

    代表空语句,本身没有任何作用,但又是合法的语句,它经常用来填补程序设计的空缺。
     
    shell和C语言一样,可以提供自定义函数。

    function funcname

    {

      commands

    }

    使用函数前必须先定义函数。
     
     
    函数例子。

    #! /bin/sh

    function func

    {

            echo "function is begin"

    }

    func

    带有参数的函数例子。

    #! /bin/sh

    function func

    {

            echo "function is begin"

            a=$1

            b=$2

            echo `expr $a + $b`

    }

    func 3 5

    带有参数和返回值的函数例子。

    #! /bin/sh

    function func

    {

            echo "function is begin"

            a=$1

            b=$2

            return `expr $a + $b`

    }

    func 3 9

    var1=$?

    echo $var1

    只要对linux的命令很熟悉,在稍具一些程序语言能力,学习Shell编程是可以速成的。
    Shell内置的功能与程序控制语句:if,case等都很简单。
    通过大量动手操作,仔细了解每种语句的用法,相信足可以成为Shell编程高手。



  • 相关阅读:
    NSDate
    Info.plist字段列表详解
    面向对象编程思想以及强、弱引用总结
    分类(类别/Category)与 类扩展(Extension)
    UIAlertView
    SQLite3的运用
    快速创建单例
    C++ 常用设计模式
    I2S 总线学习:2-I2S驱动WM8978
    设计模式的七大原则
  • 原文地址:https://www.cnblogs.com/shichuan/p/4483645.html
Copyright © 2020-2023  润新知