变量
- 定义变量:变量名=变量值,等号两侧不能有空格,变量名一般习惯用大写。
- 删除变量:unset 变量名 。
- 声明静态变量:readonly 变量名,静态变量不能unset。
- 使用变量:$变量名
将命令返回值赋给变量(重点)
- A=
ls反引号,执行里面的命令- A=$(ls) 等价于反引号
位置参数变量
基本语法
- $n :$0 代表命令本身、$1-$9 代表第1到9个参数,10以上参数用花括号,如 ${10}。
- $* :命令行中所有参数,且把所有参数看成一个整体。
- $@ :命令行中所有参数,且把每个参数区分对待。
- $# :所有参数个数。
- $!
![]()
- $? :最后一次执行的命令的返回状态,0为执行正确,非0执行失败。
运算符
基本语法
- $((运算式)) 或 $[运算式]
- expr m + n 注意 expr 运算符间要有空格
- expr m - n
- expr *,/,% 分别代表乘,除,取余
# 第1种方式 $(())echo $(((2+3)*4))# 第2种方式 $[],推荐echo $[(2+3)*4]# 使用 exprTEMP=`expr 2 + 3`echo `expr $TEMP \* 4`
条件判断
基本语法
[ condition ] 注意condition前后要有空格。非空返回0,0为 true,否则为 false 。
#!/bin/bashif [ 'test01' = 'test' ]thenecho '等于'fi# 20是否大于10if [ 20 -gt 10]thenecho '大于'fi# 是否存在文件/root/shell/a.txtif [ -e /root/shell/a.txt ]thenecho '存在'fiif [ 'test02' = 'test02' ] && echo 'hello' || echo 'world'thenecho '条件满足,执行后面的语句'fi
注意: test 、[ condition ] 、 [[ condition ]] 的区别
流程控制
if [ 条件判断式 ];then程序fi# 或者(推荐)if [ 条件判断式 ]then程序elif [ 条件判断式 ]then程序fi
case $变量名 in"值1")如果变量值等于值1,则执行此处程序1;;"值2")如果变量值等于值2,则执行此处程序2;;...省略其它分支...*)如果变量值不等于以上列出的值,则执行此处程序;;esac
#for循环# 语法1for 变量名 in 值1 值2 值3...do程序done# 语法2for ((初始值;循环控制条件;变量变化))do程序done
示例:
#!/bin/bash# 使用$*for i in "$*"doecho "the arg is $i"doneecho "=================="# 使用$@for j in "$@"doecho "the arg is $j"done#结果如下the arg is 1 2 3==================the arg is 1the arg is 2the arg is 3
while [ 条件判断式 ]do程序done
示例:输出从1加到100的值
#!/bin/bashSUM=0i=0while [ $i -le $1 ]doSUM=$[$SUM+$i]i=$[$i+1]doneecho $SUM
读取控制台输入
基本语法
read (选项) (参数)
选项
- -p:指定读取值时的提示符
- -t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不再等待了。
参数
- 变量名:读取值的变量名
示例:
#!/bin/bashread -p "请输入一个数num1=" NUM1echo "你输入num1的值是:$NUM1"read -t 10 -p "请在10秒内输入一个数num2=" NUM2echo "你输入num2的值是:$NUM2"#结果请输入一个数num1=10你输入num1的值是:10请在10秒内输入一个数num2=20你输入num2的值是:20
函数
系统函数
- basename,删掉路径最后一个 / 前的所有部分(包括/),常用于获取文件名。
# basename /usr/bin/sortsort# basename include/stdio.hstdio.h# basename include/stdio.h .hstdio
- dirname,删掉路径最后一个 / 后的所有部分(包括/),常用于获取文件路径。
# dirname /usr/bin//usr# dirname dir1/str dir2/strdir1dir2# dirname stdio.h.
自定义函数
[ function ] funname[()]{Action;[return int;]}# 调用funname 参数1 参数2...
示例:
#!/bin/bashfunction getSum(){SUM=$[$n1+$n2]echo "sum=$SUM"}read -p "请输入第一个参数n1:" n1read -p "请输入第二个参数n2:" n2# 调用 getSum 函数getSum $n1 $n2
