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

运算符 说明 举例
-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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容