shell
1、位置参数变量
位置参数变量 | 作用 |
---|---|
$nn代表数字n | n代表数字,$0 代表命令本身,$1~$9 代表第一个参数到第九个参数,十以上的参数需要使用大括号表示:${10} 、${11} |
$* | 这个变量代表命令行中的所有参数,$* 把所有的参数看做一个整体【不包含命令本身】 |
$@ | 这个变量也代表命令行的所有参数,但是$@ 把每个参数作为一个整体看待【不包含命令本身】 |
$# | 这个变量代表命令行中所有参数的个数【不包含命令本身】 |
test.sh
echo $0
echo $1
echo $2
echo $*
echo $@
echo $#
# $*:循环只会执行一次,一次性输出所有参数
for i in `$*`
do
echo $i
done
# $@:有多少个参数,就会执行多少次,每次输出一个参数的值
for i in `$@`
do
echo $i
done
2、预定义变量
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令的返回状态。如果这个变量的值为0,则说明上一个命令正确执行;否则说明命令执行不正确,返回值根据命令自定义 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号 |
3、变量的声明
#语法
declare [+/-][选项] 变量名
选项 | 说明 |
---|---|
- | 给变量设定类型属性 |
+ | 取消变量类型属性 |
-i | 将变量设定为整数类型 |
-x | 将变量声明为环境变量 |
-p | 显示指定变量的被声明的类型 |
# 数值运算方式1【ps:在shell中,所有变量的类型默认都是string】:使用declare指定数值类型做数值运算,不推荐使用
num1=10
num2=20
declare -i sum1=$num1+$num2
# 数值运算方式2:使用$和expr,不推荐使用
sum2=$(expr $num1 + $num2) #注意:加号左右两侧的空格必须存在,否则报错
# 数值运算方式3:$((运算式)) 和 $[运算式]:$(系统命令),$+()代表的执行的是系统命令
sum3=$(($num1+$num2)) 或 sum3=$(( $num1+$num2 )) # 空格检查不是很严格,都可以支持
sum4=$[$num1+$num2] 或 sum4=$[ $num1+$num2 ] # 空格检查不是很严格,都可以支持
变量置换方式 | 变量y没有设置 | 变量y为空值 | 变量y设置值 |
---|---|---|---|
x=${y-新值} | x=新值 | x为空 | x=$y |
x=${y:-新值} | x=新值 | x=新值 | x=$y |
x=${y+新值} | x为空 | x=新值 | x=新值 |
x=${y:+新值} | x为空 | x为空 | x=新值 |
x=${y=新值} | x=新值 y=新值 | x为空 y值不变 | x=$y y值不变 |
x=${y:=新值} | x=新值 y=新值 | x=新值 y=新值 | x=$y y值不变 |
x=${y?新值} | 新值输出到标准错误输出(就是屏幕) | x为空 | x=$y |
x=${y:?新值} | 新值输出到标准错误输出(就是屏幕) | 新值输出到标准错误输出(就是屏幕) | x=$y |
# 数值逻辑运算
a=1
b=2
# 方式一
if [ $a -eq $b ]
then
echo "1 a is equals b"
else
echo "1 a is not equals b"
fi
# 方式二
if test $a -eq $b
then
echo "2 a is equals b"
else
echo "2 a is not equals b"
fi
# 方式三
if test [$a] -eq [$b]
then
echo "2 a is equals b"
else
echo "2 a is not equals b"
fi