shell 教程

  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

运算符说明举例
-eqis equal to[ $a -eq $b ]
-neis notequal to[ $a -ne $b ]
-gtis greater than[ $a -gt $b ]
-ltis less than[ $a -lt $b ]
-geis greater or equal[ $a -ge $b ]
-leis less or equal[ $a -le $b ]
!非运算符[!false]
-oor[ $a -lt 20 -o $b -gt 100 ]
-aand[ $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 ]
-ffile is an ordinary file[ -f $file ]
-dfile is a directory[ -d $file ]
-sfile size is zero[ -s $file ]
-efile 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

    原文作者:ClarkWang_001
    原文地址: https://www.jianshu.com/p/bd3bbe401c29
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞