bash变量
存储的内容
- 字符串(对于数字串来说,不是二进制形式)
- 在执行过程中其内容可以被修改
变量名
- 第一个字符必须为字母
- 其余字符可以是字母,数字,下划线
变量的赋值和引用
赋值与引用
1 2
| addr=20.1.1.254 ftp $addr
|
注意:
赋值作为单独一条命令,等号两侧不许多余空格
引用addr变量的方法:$addr
或${addr}
1 2
| echo ${addr}A echo $addrA
|
命令行中含有$符的变量引用,shell会先完成变量替换。
1 2 3 4 5 6
| [root@localhost 替换、元字符和转义]# addr=20.1.1.254 [root@localhost 替换、元字符和转义]# echo ${addr}A 20.1.1.254A [root@localhost 替换、元字符和转义]# echo $addrA
[root@localhost 替换、元字符和转义]#
|
赋值时,等号右侧字符串中含有特殊字符
1 2
| unit="Beiyou University" echo $unit
|
1 2 3 4
| [root@localhost 替换、元字符和转义]# unit="Beiyou University" [root@localhost 替换、元字符和转义]# echo $unit Beiyou University [root@localhost 替换、元字符和转义]#
|
变量的引用
如果引用未定义变量,则变量值为空字符串
1 2 3
| echo Connect to $proto Network proto=TCP/IP echo Connect to $proto Network
|
上面的第一行引用了proto变量,不过该变量没有定义过,此时将替换为空字符串,
第3行的也引用了proto变量,不过由于该变量在第2行已经定义过了,将会替换为该变量的值。
运行效果:
1 2 3 4 5 6 7 8
| [root@localhost 替换、元字符和转义]# cat variable.sh echo Connect to $proto Network proto=TCP/IP echo Connect to $proto Network [root@localhost 替换、元字符和转义]# bash variable.sh Connect to Network Connect to TCP/IP Network [root@localhost 替换、元字符和转义]#
|
shell内部开关
set -u
:当引用一个未定义的变量时,产生一个错误
set +u
:当引用一个未定义的变量时,认为是一个空串(默认情形)
set -x
:执行命令前打印出shell替换后的命令及参数,为区别于正常的shell输出,前面冠以+号
set +x
:取消上述设置
在上面的代码前面加上set -u
varSet+U.sh1 2 3 4
| set -u echo Connect to $proto Network proto=TCP/IP echo Connect to $proto Network
|
得到varSet+U.sh
,然后运行该脚本:
1 2 3
| [root@localhost 替换、元字符和转义]# bash varSet+U.sh varSet+U.sh:行2: proto: 为绑定变量 [root@localhost 替换、元字符和转义]#
|
命令echo
语法与功能
打印各命令行参数,每两个参数之间用一空格分开,最后打印换行符
不可打印字符(转义):
Linux需加选项-e,(不同UNIX间兼容性差)
echo支持C语言字符串常数描述格式的转义和\c
转义字符 |
功能 |
\c |
打印完毕,不换行 |
\b |
退格 |
\n |
换行 |
\r |
回车 |
\t |
水平制表 |
\\ |
反斜线 |
\nnn |
八进制描述的字符ASCII码 |
示例
举例
1 2 3 4
| echo Beijing China echo "Beijing China" echo -e '\065' echo -e "\\r$cnt \\c"
|
1 2 3 4 5 6 7 8 9
| [root@localhost ~]# echo Beijing China Beijing China [root@localhost ~]# echo "Beijing China" Beijing China [root@localhost ~]# echo -e '\065' 5 [root@localhost ~]# echo -e "\\r$cnt \\c" [root@localhost ~]# [root@localhost ~]#
|
命令printf
命令printf,用法与C函数printf类似,例如:
1
| printf '\033[01;33mConnect to %s Network\n' $proto
|