变量
shell并不区分变量的类型,或者说变量都是弱类型的,本质上都是字符串,但是如果变量值中只含有数字,shell还是支持对其进行算术运算
赋值
常见的赋值操作符有=(在其前后没有空白符)和let
# let 赋值
a=123
let b=a+1
echo "value of a is $b" #value of a is 124
# = 赋值
a="hello world"
echo "${a}" #hello world
# in 赋值
for var in 7 8 9 11
do
echo "$var"
done
# read 赋值
echo "Please input value for a "
read a
echo "The value of a is $a."
# 命令赋值
dir=`pwd`
dirs=`ls -l`
R=$(cat /etc/redhat-release)
arch=$(uname -m)
# 1 let 可以对纯数字的变量进行简单的算术运算
# 2 = 绝大多数赋值由=完成,但是=也有比较是否相等的功(-eq),建议条件判断时候用-eq
# 3 in 赋值表达式类似python循环中的表达式
# 4 read 赋值常用在交互场景获取标准输入值
# 5 命令赋值中的反引号:`cmd`与$(cmd) 功能类似,都是命令替换的作用
引用与替换
value='l i n u x'
VAR_A=value
VAR_B=$value
VAR_C=${value}
VAR_G="value"
VAR_H="$value"
VAR_I="${value}"
VAR_D='value'
VAR_E='$value'
VAR_F='${value}'
echo VAR_A #value
echo VAR_B #l i n u x
echo VAR_C #l i n u x
echo VAR_G #value
echo VAR_H #l i n u x
echo VAR_I #l i n u x
echo VAR_D #value
echo VAR_E #$value
echo VAR_F #${value}
# 1.变量赋值时候,赋值符号=的两侧不能有空格存在,如果存在shell解释器会将其解释为:命令 参数
# 2.使用单引号''时,变量只会作为字符串显示,不会发生变量替换
# 3.使用双引号""时,可以使用变量替换,引号内变量将会保留变量的空白符(VAR_H)。没有引号则会去掉重复的空格(VAR_B)
# 4.$value这种写法是${value}的简化形式,使用完整形式会让编译器跟容易识别变量范围从而更保险一些。
特殊变量
#位置参数
$0 #命令行参数:$0:脚本名称
$1, $2...$n #命令行参数,$1 第一个参数,$2第二个,$9之后的参数要有大括号,如 ${10}
$* #代表所有位置参数(不包括脚本本身)
$@ #代表所有位置参数(不包括脚本本身)
$# #所有位置参数个数(不包括脚本本身)
$? #上一个指令的返回值(0成功,非0有错误)
$$ #Shell本身的PID
$! #Shell最后运行的后台进程的PID
#环境变量
#使用env或者export查看当前生效的环境变量,export可以将其环境变量导出到子进程,反之则不行