变量

  • 定义变量:变量名=变量值,等号两侧不能有空格,变量名一般习惯用大写。
  • 删除变量:unset 变量名 。
  • 声明静态变量:readonly 变量名,静态变量不能unset。
  • 使用变量:$变量名

将命令返回值赋给变量(重点)

  • A=ls 反引号,执行里面的命令
  • A=$(ls) 等价于反引号

位置参数变量
基本语法

  • $n :$0 代表命令本身、$1-$9 代表第1到9个参数,10以上参数用花括号,如 ${10}。
  • $* :命令行中所有参数,且把所有参数看成一个整体。
  • $@ :命令行中所有参数,且把每个参数区分对待。
  • $# :所有参数个数。
  • $!shell教程 - 图1
  • $? :最后一次执行的命令的返回状态,0为执行正确,非0执行失败。

运算符

基本语法

  • $((运算式)) 或 $[运算式]
  • expr m + n 注意 expr 运算符间要有空格
  • expr m - n
  • expr *,/,% 分别代表乘,除,取余
  1. # 第1种方式 $(())
  2. echo $(((2+3)*4))
  3. # 第2种方式 $[],推荐
  4. echo $[(2+3)*4]
  5. # 使用 expr
  6. TEMP=`expr 2 + 3`
  7. echo `expr $TEMP \* 4`

条件判断

基本语法
[ condition ] 注意condition前后要有空格。非空返回0,0为 true,否则为 false 。

  1. #!/bin/bash
  2. if [ 'test01' = 'test' ]
  3. then
  4. echo '等于'
  5. fi
  6. # 20是否大于10
  7. if [ 20 -gt 10]
  8. then
  9. echo '大于'
  10. fi
  11. # 是否存在文件/root/shell/a.txt
  12. if [ -e /root/shell/a.txt ]
  13. then
  14. echo '存在'
  15. fi
  16. if [ 'test02' = 'test02' ] && echo 'hello' || echo 'world'
  17. then
  18. echo '条件满足,执行后面的语句'
  19. fi

注意: test 、[ condition ] 、 [[ condition ]] 的区别

流程控制

  1. if [ 条件判断式 ];then
  2. 程序
  3. fi
  4. # 或者(推荐)
  5. if [ 条件判断式 ]
  6. then
  7. 程序
  8. elif [ 条件判断式 ]
  9. then
  10. 程序
  11. fi
  1. case $变量名 in
  2. "值1")
  3. 如果变量值等于值1,则执行此处程序1
  4. ;;
  5. "值2")
  6. 如果变量值等于值2,则执行此处程序2
  7. ;;
  8. ...省略其它分支...
  9. *)
  10. 如果变量值不等于以上列出的值,则执行此处程序
  11. ;;
  12. esac

  1. #for循环
  2. # 语法1
  3. for 变量名 in 1 2 3...
  4. do
  5. 程序
  6. done
  7. # 语法2
  8. for ((初始值;循环控制条件;变量变化))
  9. do
  10. 程序
  11. done

示例:

  1. #!/bin/bash
  2. # 使用$*
  3. for i in "$*"
  4. do
  5. echo "the arg is $i"
  6. done
  7. echo "=================="
  8. # 使用$@
  9. for j in "$@"
  10. do
  11. echo "the arg is $j"
  12. done
  13. #结果如下
  14. the arg is 1 2 3
  15. ==================
  16. the arg is 1
  17. the arg is 2
  18. the arg is 3

  1. while [ 条件判断式 ]
  2. do
  3. 程序
  4. done

示例:输出从1加到100的值

  1. #!/bin/bash
  2. SUM=0
  3. i=0
  4. while [ $i -le $1 ]
  5. do
  6. SUM=$[$SUM+$i]
  7. i=$[$i+1]
  8. done
  9. echo $SUM

读取控制台输入

基本语法

read (选项) (参数)
选项

  • -p:指定读取值时的提示符
  • -t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不再等待了。

参数

  • 变量名:读取值的变量名

示例:

  1. #!/bin/bash
  2. read -p "请输入一个数num1=" NUM1
  3. echo "你输入num1的值是:$NUM1"
  4. read -t 10 -p "请在10秒内输入一个数num2=" NUM2
  5. echo "你输入num2的值是:$NUM2"
  6. #结果
  7. 请输入一个数num1=10
  8. 你输入num1的值是:10
  9. 请在10秒内输入一个数num2=20
  10. 你输入num2的值是:20

函数

系统函数

  1. basename,删掉路径最后一个 / 前的所有部分(包括/),常用于获取文件名。
  1. # basename /usr/bin/sort
  2. sort
  3. # basename include/stdio.h
  4. stdio.h
  5. # basename include/stdio.h .h
  6. stdio
  1. dirname,删掉路径最后一个 / 后的所有部分(包括/),常用于获取文件路径。
  1. # dirname /usr/bin/
  2. /usr
  3. # dirname dir1/str dir2/str
  4. dir1
  5. dir2
  6. # dirname stdio.h
  7. .

自定义函数

  1. [ function ] funname[()]
  2. {
  3. Action;
  4. [return int;]
  5. }
  6. # 调用
  7. funname 参数1 参数2...

示例:

  1. #!/bin/bash
  2. function getSum(){
  3. SUM=$[$n1+$n2]
  4. echo "sum=$SUM"
  5. }
  6. read -p "请输入第一个参数n1:" n1
  7. read -p "请输入第二个参数n2:" n2
  8. # 调用 getSum 函数
  9. getSum $n1 $n2