文章标题
2017-09-26 08:39
330 查看
变量替换
变量的名字就是变量保持值的地方,引用变量的值就叫做变量替换。- $var
- ${var}
- “$var”
- “${var}”
变量替换和引用的方式,其中在““中发生变量替换,叫部分引用,在‘ ‘中就不会发生变量替换,叫全引用。
注意:\$var 与\${var}的区别,不加{},在某些上下文将引起错误
#!/bin/bash hello="A B C D" echo $hello #A B C D echo ${hello} #A B C D echo "$hello" #A B C D echo "${hello}" #A B C D # echo \$hello和 echo "$hello" 结果不同 # 引用一个变量将保留其中的空白,当然,如果是变量替换就不会保留了 echo '$hello' #$hello #全引用则是把$变成一个单独的字符
变量赋值
=let
read方式
$(…)
` `
#!/bash a=375 echo $a b=$a echo $b #命令结果赋值 a=`echo $hello!` #将echo 命令的结果传给变量a echo $a a=`ls -l` echo "$a" #保留a中的空格和换行 #let let a=16+5 15 echo "The value of \"a\" is now $a." # 在for循环中 echo -n "Values of \"a\" in the loop are: " for a in 7 8 9 11 do echo -n "$a " done echo # 在 read 命令状态中 echo -n "Enter \"a\" " read a echo "The value of \"a\" is now $a." echo #$() R=$(cat /ect/redhat-release) arch=$(uname -m) echo $R echo $arch
变量是不分类型的
变量不区分类型,都是字符串。但是依赖于上下文,Bash 也允许比较操作和算术操作.决定这些的关键因素就是,变量中的值 是否只有数字。特殊变量类型
local variables这种变量只有在代码块或者是函数中才可见(具体见 23.2 和 23 章)
environmental variables
这种变量将改变用户接口和 shell 的行为
用户变量:每次当 shell 启动时,它都将创建自己的环境变量.更新或者添加新的环境变量,将导 致 shell 更新它的环境,同时也会影响所有继承自这个环境的所有子进程(由这个命令 导致的).
如果一个脚本设置了环境变量,需要 export 它,脚本只能对它产生的子进程 export 变量.一个从命令行被调用的脚本 export 的变量,将 不能影响调用这个脚本的那个命令行 shell 的环境.
positional parameters
就是从命令行中传进来的参数,$0, $1, $2, $3
$0 就是脚本文件的名字,$1 是第一个参数,$2 为第 2 个…,$9 以后就需要打括号了,如10,{11},${12}…
\$*和\$@
#!/bin/bash #调用这个脚本需要10个参数,如 ./scriptname 1 2 3 4 5 6 7 8 9 10 MINPARAMS=10 echo "This name of scriptname is \"$0\"." echo "This name of scriptname is \"`basename $0`\"."
{}标记法是一种很好的使用位置参数的方法.这也需要间接引用
1. args=$# 位置参数的个数
2. lastarg=${!args}
3. # 或: lastarg=${!#}
4. # 注意 lastarg=${!$#} 将报错
退出和退出状态
exit 通常成功返回0,非0 错误码exit $? 一个脚本以不带参数 exit 来结束时,脚本的退出状态就由脚本中最后执行命令来决定