shell 教程

作者: ClarkWang_001 | 来源:发表于2015-07-02 07:31 被阅读147次
    1. 定义变量

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

    varName="value"

    1. 使用变量:
      $+变量名
      echo $varName;
      echo ${your_name}
      {}可选,好处是为了解释器识别变量的边界;

    2. 只读变量
      readonly varName

    3. 删除变量
      unset varName

    4. 特殊变量:
      $0 $n $# $* $@ $? $$
      $* 和 $@ 的区别
      $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。

    但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。

    1. 命令替换
      shell 先执行命令,将输出结果保存,在适当的时候输出;
      `command个人理解,就是把计算结果保存在一个临时变量中 比如: date=\DATE`
      echo "date is $date"

    2. 变量替换
      ${var} | 原来的值
      -------|---------
      ${var:-word}|如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
      ${var:=word}| 如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
      ${var:+word}|如果变量 var 被定义,那么返回 word,但不改变 var 的值。
      ${var:?message}|如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。
      若此替换出现在Shell脚本中,那么脚本将停止运行

    3. shell 运算符
      运算符 两边记得一定要留空格,否则会整体当做一个字符串输出
      表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2
      乘法 * 必须添加\转义才能实现乘法运算
      echo expr 2 \* 4

    运算符 说明 举例
    -eq is equal to [ $a -eq $b ]
    -ne is notequal to [ $a -ne $b ]
    -gt is greater than [ $a -gt $b ]
    -lt is less than [ $a -lt $b ]
    -ge is greater or equal [ $a -ge $b ]
    -le is less or equal [ $a -le $b ]
    ! 非运算符 [!false]
    -o or [ $a -lt 20 -o $b -gt 100 ]
    -a and [ $a -lt 20 -a $b -gt 100 ]
    -z 检测字符串长度是否是zero 为0 返回true [ -z $a ]
    -n 检测字符串长度是否是zero 不为0返回true [ -n $a ]
    -r 检测文件 has read access [ -r $file ]
    -w 检测文件has write permission [ - w $file ]
    -x 检测文件has execute permission [ -x $file ]
    -f file is an ordinary file [ -f $file ]
    -d file is a directory [ -d $file ]
    -s file size is zero [ -s $file ]
    -e file exists [ -e $file ]
    1. 只有单行注释 用#
    2. 单引号,双引号字符串
      单引号字符串的限制:
      单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
      单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
      双引号的优点:
      双引号里可以有变量
      双引号里可以出现转义字符
      youname="ffc"
      grren="hello, "$youname" "
      gren3="hello,${youname}"
      获取字符串长度:
      string="abcd"
      echo ${#string}
      提取子字符串:
      echo ${string:1:4}
      查找字符串:
      echo expr index "$string" is
    3. 数组:()包括,空格分割
      array=(v1 v2 v3)
      读取数组 ${array[2]}
      读取所有元素: ${array[]} ${array[@]}
      获取数组长度:${#array[@]} ${#array[
      ]} ${#array[n]}
    4. 输出字符串 echo
      printf 不加括号 可以用单双引号, 参数用空格分割;
    5. shell if 语句
      if ... fi 语句;
      if ... else ... fi 语句;
      if ... elif ... else ... fi 语句。
    a=10
    b=20
    if [ $a == $b ]
    then
       echo "a is equal to b"
    elif [ $a -gt $b ]
    then
       echo "a is greater than b"
    elif [ $a -lt $b ]
    then
       echo "a is less than b"
    else
       echo "None of the condition met"
    fi
    
    1. case 模式
      read aNum
      case $aNum in
      1. echo "go one "
        ;;
    1. echo "you select 2"
      ;;
      *) echo "donn't find"
      ;;
      esac
    echo 'Input a number between 1 to 4'
    echo 'Your number is:\c'
    read aNum
    case $aNum in
        1)  echo 'You select 1'
        ;;
        2)  echo 'You select 2'
        ;;
        3)  echo 'You select 3'
        ;;
        4)  echo 'You select 4'
        ;;
        *)  echo 'You do not select a number between 1 to 4'
        ;;
    esac
    
    1. for循环一般格式为:
      for 变量 in 列表
      do
      command1
      command2
      ...
      commandN
      done
    for loop in 1 2 3 4 5
    do
        echo "The value is: $loop"
    done
    
    1. while 循环 运算符两边一定留空格
    counter=0
    while [ $counter -lt 5 ]
    do
      counter=`expr $counter + 1`
      echo $counter
    done
    
    1. until 循环执行一系列命令直至条件为 true 时停止
    #!/bin/bash
    a=0
    until [ ! $a -lt 10 ]
    do
       echo $a
       a=`expr $a + 1`
    done
    
    1. break 跳出所有循环 break n 嵌套循环中跳出几级循环
      continue 跳出当前循环
    2. 函数
    #!/bin/bash
    funWithReturn(){
        echo "The function is to get the sum of two numbers..."
        echo -n "Input first number: "
        read aNum
        echo -n "Input another number: "
        read anotherNum
        echo "The two numbers are $aNum and $anotherNum !"
        return $(($aNum+$anotherNum))
    }
    funWithReturn
    # Capture value returnd by last command
    ret=$?
    echo "The sum of two numbers is $ret !"
    

    删除变量:
    unset -f function_name

    #!/bin/bash
    funWithParam(){
        echo "The value of the first parameter is $1 !"
        echo "The value of the second parameter is $2 !"
        echo "The value of the tenth parameter is $10 !"
        echo "The value of the tenth parameter is ${10} !"
        echo "The value of the eleventh parameter is ${11} !"
        echo "The amount of the parameters is $# !"  # 参数个数
        echo "The string of the parameters is $* !"  # 传递给函数的所有参数
    }
    funWithParam 1 2 3 4 5 6 7 8 9 34 73
    
    1. 标准输入设备就是键盘 ,标准输出设备就是显示器;
      输出重定向:
      command > file
      追加不覆盖 command >>file
    2. 引用其他文件:
      . sourcefile
      source filename
      一般使用点号(.),但是注意点号(.)和文件名中间有一空格。

    http://c.biancheng.net/cpp/view/7010.html

    相关文章

      网友评论

        本文标题:shell 教程

        本文链接:https://www.haomeiwen.com/subject/eyhsqttx.html