SHELL脚本-第三课
- 回顾
- 变量和参数介绍
-
- 变量替换
- 变量赋值
- Bash变量是无类型
- 特殊变量类型
- 参考资料
回顾
- 对特殊字符有了更多的了解
变量和参数介绍
变量1是脚本编程中的如何进行数据表现的办法。它们可以在算术计算中作为操作数,在一个字符串表达式中作为符号表达抽象的意义或是其他的其它意义。变量是表示计算机内存中保存一种数据需要占的一个位置或一组的位置的标识。
变量替换
变量的名字是它的值保存的地方。引用它的值称为变量替换(variable substitution)。
引用符号:
$
引用方式:
variable="very good!" #“=”左右不能留有空格
echo "${variable}"
其中,在一个双引号
" "
里的变量引用不会禁止变量替换。所以双引号被称为部分引用,有时也称为"弱引用"。而在一个单引号里
' '
的变量替换是被禁止的,变量名只被解释为普通的字面意思。所以单引号被称为"全局引用",有时也被称为**强引用**。
注意:
$variable
实际上只是
${variable}
的简单的简写形式。在某些场合使用
$variable
形式会引起错误,这时你可能需要使用
${variable}
的形式了。
变量赋值
变量赋值的符号
=
,该符号为赋值操作符(它的左右两边不能有空白符)。
赋值的特殊使用方法,如下所示:
#!/bin/bash
a=23 #简单的赋值
echo $a
b=$a
echo $b
a=`echo Hello!` #命令替换赋值
echo $a
a=`ls -l`
echo $a #如果没有引号,则会删除多余tab键和空白符
echo
echo "$a" # 加了双引号,则能够原样保留空白符
exit 0
运行结果如下所示:
$ ./4-3-AssignmentVariable.sh
23
23
Hello!
total 8 -r-xr-xr-x 1 sss staff 107 1 8 13:39 4-3-AssignmentVariable.sh drwxr-xr-x 7 sss staff 224 1 7 09:59 Shell
total 8
-r-xr-xr-x 1 sss staff 107 1 8 13:39 4-3-AssignmentVariable.sh
drwxr-xr-x 7 sss staff 224 1 7 09:59 Shell
同样,用命令替换的另外的格式如下:
R=$(cat /etc/redhat-release)
arch=$(uname -m)
其中,变量赋值也可以使用
$(...)
机制(它是比斜引号更新的方法)。
Bash变量是无类型
不同与许多其他的编程语言,Bash不以"类型"来区分变量。本质上来说,Bash变量是字符串,但是根据环境的不同,Bash允许变量有整数计算和比较。其中的决定因素是变量的值是不是只含有数字。
#!/bin/bash
a=2334
let "a += 1" #a = 2335
echo "a = $a"
echo
b=${a/23/BB} #把变量a中的"23"替换为"BB"并赋给变量b
#这使变量$b成为字符串
echo "b = $b"
declare -i b #即使明确地声明它是整数也没有用
echo "b = $b"
let "b += 1"
echo "b = $b" #b = 1
echo
exit 0
运行结果如下所示:
$ ./4-4-BashNoClass.sh
a = 2335
b = BB35
b = BB35
b = 1
由上可以看出,Bash中变量没有明确的数据类型。
特殊变量类型
- 局部变量:局部变量只在代码块或一个函数里有效。
- 环境变量:这种变量会影响Shell的行为和用户接口。
- 位置变量:命令行传递给脚本的参数是:
,$0
,$1
,$2
. . .。其中,特殊变量$3
和$*
表示所有的位置参数,以及$@
表示传入脚本的参数个数。例如:$#
#!/bin/bash
#至少以10个参数运行这个脚本,例如:
MINPARAMS=10
echo
echo "The name of this script is \"$0\"."
# 用./表示当前目录
echo "The name of this script is \"`basename $0`\"."
# 去掉路径名(查看'basename'命令)
echo "The name of this script is \"`pwd`\"."
Number=$#
echo "The number of Parameter is ${Number}."
echo
if [ -n "$1" ] # 被测试的变量被双引号引起
then
echo "Parameter #1 is $1" # 使用引号来使#被转义
fi
if [ -n "$2" ]
then
echo "Parameter #2 is $2"
fi
if [ -n "$3" ]
then
echo "Parameter #3 is $3"
fi
if [ -n "$4" ]
then
echo "Parameter #4 is $4"
fi
if [ -n "$5" ]
then
echo "Parameter #5 is $5"
fi
if [ -n "$6" ]
then
echo "Parameter #6 is $6"
fi
if [ -n "$7" ]
then
echo "Parameter #7 is $7"
fi
if [ -n "$8" ]
then
echo "Parameter #8 is $8"
fi
if [ -n "$9" ]
then
echo "Parameter #9 is $9"
fi
if [ -n "${10}" ]
then
echo "Parameter #10 is ${10}"
fi
echo "-----------------------------------"
echo "All the command-line parameters are: "$*""
if [ $# -lt "$MINPARAMS" ]
then
echo
echo "This script needs at least $MINPARAMS command-line arguments!"
fi
echo
exit 0
运行结果如下所示:
$ ./4-5-PointParameter.sh 1 2 3 4 5 6 7 8 9 10
The name of this script is “./4-5-PointParameter.sh”.
The name of this script is “4-5-PointParameter.sh”.
The name of this script is “/Users/sss/Shell”.
The number of Parameter is 10.
Parameter #1 is 1
Parameter #2 is 2
Parameter #3 is 3
Parameter #4 is 4
Parameter #5 is 5
Parameter #6 is 6
Parameter #7 is 7
Parameter #8 is 8
Parameter #9 is 9
Parameter #10 is 10
‘-----------------------------------’
All the command-line parameters are: 1 2 3 4 5 6 7 8 9 10
其中,可再多了解一下
shift
的使用方法2,或许以后会有用。
参考资料
- shell脚本手册 ↩︎
- Linux shell脚本中shift的用法说明 ↩︎