文章目录
变量
shell中的变量不区分类型,都是字符串,无论有没有加引号,如果值不包含空格,就可以不用引号。
定义变量
定义变量的方式如下(切记:等号两边不能有空格!)
a=hello
a='hello'
a="hello"
有、无引号的区别
# 变量值中没有空格时没区别
b=world
b='world'
# 变量值中有空格时,必须有引号
c=hello world # error
c="hello world"
使用变量
想引用一个定义过的变量,变量名前面需要加 $ 符号,变量名也可以用 {} 括起来
echo $a
echo ${a}
也可以在其他字符串中包含定义过的变量(反正都是字符串)
echo "$a, world!"
有时为了界定变量名的边界,必须加上 {} 。(给变量加上 {} 是个好习惯)
echo "${a}bcd"
需要注意的是,使用一个没有定义的变量,只是没有输出,并不会报错
echo ${d}
单、双引号的区别
单引号中的内容会保持字面值,双引号会解析其中的变量和命令
echo '${a}' # 输出 ${a}
echo "${a}" # 输出 hello
用变量保存命令执行的结果
有两种方式
echo $(command) # 容易辨识,且可嵌套,但是只能在bash中使用
echo `command` # 不好辨识,无法嵌套,但多种shell都支持
双引号的重要用处
当变量值或命令返回的内容中有多个空格、tab、换行时,直接使用的话会被替换成一个空格
d="f j"
echo ${d} # f j
echo $(ll -a) # 换行被替换成了一个空格
要避免这种情况,就要在使用时放进双引号里
echo "${d}"
echo "$(ll -a)"
删除变量
unset z
特殊变量
系统变量
$SHELL
$HOME
$PS1
$PS2
位置参数
$0 $1 ${2} ${10} # 脚本名和传递给脚本或函数的位置参数,10及以上必须带 {}
$# # 传递给脚本或函数的位置参数的个数
$* #@ # 传递给脚本或函数的所有位置参数
$? # 上一命令的退出状态,或,函数的返回值
$$ # 当前shell进程id
注意,$*
和 $@
在双引号中有区别
for param in "$*"; do
echo "${param}" # 输出一次
done
for param in "$@"; do
echo "${param}" # 输出多次
done
字符串
shell的变量都是字符串,字符串有很多属性和操作
长度
${#a} # 获取长度,必须加 {}
拼接
shell中字符串拼接只需写在一起即可
echo ${a}${b} # 写在一起即可
echo ${a}"---"${b}
echo "${a}${b}" # 这样也可以
内建命令
echo
alias
exit
数学、比较、逻辑运算
(())
(())中做数学逻辑运算,用 $ 获取结果,(())中使用变量时,$ 加不加都行
echo $((1+2)) # 3
echo $((1>0)) # 1
c=$((${a}+${b}))
c=$((a+b))
流程控制
条件判断
if elif else
if cond; then
balabala
elif cond; then
balabala
else
balabala
fi