ApacheVersion=”httpd-2.2.p1”&&tar –xvzf $ApacheVersion.tar.gz | |
echo Hi,${myname}mm… | 变量有其它英.数.底线,用{}隔开$和变量名 |
dir2=lib&&echo /usr/$dir2/ntp | 变量名后接的不是英.数.底线,不必用{} |
一.变量分类
1.临时变量,重启失效
shell变量(某shell私有;set验证) ABC=’/etc/sysconfig’ Bash——进入子shell echo $ABC——无效 cd $ABC——无效 | 环境变最(子shell也有效;env或export验证) export ABC=’/etc/sysconfig’ echo $ABC——有效 cd $ABC——有效 |
2.永久变量,重启生效;用source或.使之立即生效
用户变量 ~/.bashrc ~/.bash_profile(用户环境变量——path=$PATH:/eee:.) | 全局变量 /etc/bashrc /etc/profile(全局环境变量——ABCD=1234) /etc/profile.d/*.sh(环境变量) |
二.变量的配置(变量=; unset -f函数名)
1.设定变量—— Linux只有一种数据型态:字符串
等号两边有空格符可用双引号或单引号将变量内容结合起来;如Yname=” Black Jk” ; |
若要显示$等字符可用\或’’:echo \$I或echo ‘$I’; |
变量名称中数字不能是开头字符; |
在脚本开头注释部分要尽量详细的将本脚本设计功能.修改历史写清楚,最好将编写人员的联系方式也加入其中,在脚本的最初部分将环境变量设置好; |
在编写Script时,为怕打错变量名称,造成排错上的困难,可规定变量一定要经过设定的程序才能使用 shopt -s -o nounset //nounset变量设定过才可使用 echo $Infomix报错 //-s打开选项, -o指用set –o设定选项 declare Infomix=50 && echo $Infomix |
2.只读变量不可被unset.值不可改.不能去掉r属性
b=a1 readonly b b=a2 Bash:b:readonly variable | delare -r b=a3 //设定b是只读变量 declare –p b //显示变量的属性 unset b //取消变量名 unset:b:cannot unset:readonly variable |
declare -a ary 设定变量ary是一个数组 declare -I a 设定变量a是整数 | declare -F 显示所有函数名及其属性 declare -x PATH 设定为环境变量 |
3.针对不同变量状态赋值
: 空值 测空值 | - 负向 测不存在 |
= 设值 给空值 | ? 有问题 给空值变量设一个默认值 |
+ 正向 测试存在 |
|
${待测变量:-默认值} | unset或null | 传回“默认值” |
${待测变量:=默认值} | unset或null | 将变量值设为“默认值” |
${待测变量:?提示信息} | unset或null | 显示提示信息 |
${待测变量:+真值} | 存在且非空 | 传回“真值” |
三.$(( )) $( ) ${ }
1. $( )与 ` `
` ` 很容易与 ' '搞混乱;在多层次的复合替换中,` ` 须要额外的跳脱\`处理。
而 $( ) 则比较直观。例如:command1 `command2 `command3` `,换成 $( ) 就没问题了:command1 $(command2 $(command3))。
` ` 基本上可用在全部的unix shell中使用,其shell script移植性比较高,而 $( ) 并不见的每一种 shell 都能使用。
2.${ } bash扩展替换获得不同的值(特${A}B)
(file=/dir1/dir2/my.file.txt)
# 去左边($ 左边);% 是去右边(在 $ 右边);单一符号最小匹配﹔两个符号最大匹配。 |
${file#*/}:拿掉第一条/及其左边的字符串:dir1/dir2/my.file.txt ${file##*/}:拿掉最后一条/及其左边的字符串:my.file.txt ${file#*.}:拿掉第一个.及其左边的字符串:file.txt ${file##*.}:拿掉最后一个 . 及其左边的字符串:txt |
${file%/*}:拿掉最后条 / 及其右边的字符串:/dir1/dir2 ${file%%/*}:拿掉第一条 / 及其右边的字符串:(空值) ${file%.*}:拿掉最后一个 . 及其右边的字符串:/dir1/dir2/my.file ${file%%.*}:拿掉第一个 . 及其右边的字符串:/dir1/dir2/my |
${file:0:5}:提取最左边的 5 个字节:/dir1 ${file:5:5}:提取第 5 个字节右边的连续 5 个字节:/dir2 |
${file/dir/path}:将第一个 dir 提换为 path:/path1/dir2/my.file.txt ${file//dir/path}:将全部 dir 提换为 path:/path1/path2/my.file.txt ${#var}:可计算出变量值的长度: ${#file}:得到27,/dir1/dir2/my.file.txt是27字节... |
3.$(( ))它是用来作整数运算的
$((12+i)) $((12+$i)) $((12+${i})) $((${j:-8}+2)) |