编制shell脚本、shell变量(2)

当变量名称容易和紧跟其后的其他字符相互混淆时,需要使用“{}”将变量括起来,否则将报错。比如:

[root@localhost ~]# echo $product1234 //没有找到“product1234”这个变量 [root@localhost ~]# echo ${product}1234 //正确输出变量和字符 php1234

3)变量赋值的特殊操作

1.双引号(" "):双引号主要起界定字符串的作用,特别是当要复制的内容中包含空格是,必须以双引号括起来,其他情况双引号可以省略。比如:

[root@localhost ~]# Python=python 2.3.7 bash: 2.3.7: 未找到命令... [root@localhost ~]# python="python 2.3.7" [root@localhost ~]# echo $python python 2.3.7

双引号还允许通过$符号引用其他变量值,比如:

[root@localhost ~]# SQL="SQLServer $version" [root@localhost ~]# echo $SQL SQLServer 1.2.3

2.单引号(' '):禁止引用其他变量值,$视为普通字符,单引号中的特殊符号都将视为普通字符,比如:

[root@localhost ~]# SQLServer='SQLserver $version' [root@localhost ~]# echo $SQLServer SQLserver $version

3.反撇号( ):主要用于命令替换,允许将执行某个命令的屏幕输出结果赋值给变量。反撇号括起来的内容必须是可以执行的命令,否则将出错。比如:

[root@localhost ~]# ls -lh `which systemctl` -rwxr-xr-x. 1 root root 623K 11月 7 2016 /usr/bin/systemctl

注意:使用反撇号难以子啊一行命令中实现嵌套命令替换操作,这时可以使用“$()”来替代反撇号操作,解决嵌套问题。比如:

[root@localhost ~]# rpm -qc $(rpm -qf $(which useradd)) /etc/default/useradd /etc/login.defs //查询提供useradd命令程序的软件包所安装的配置文件位置

4.大括号({}):用来分割变量和字符;如果在变量后还有其他字符,就需要使用“{}”,{}中是变量。

4)read命令

read命令可以使从键盘输入的内容为变量赋值,比如:

[root@localhost ~]# read abc /opt/backup //输入给变量abc所赋的值 [root@localhost ~]# echo $abc /opt/backup //查看结果

为了使交互式操作的界面更加友好,提高易用性,read命令可以加“-p”选项来设置提示信息,以便告知用户应该输入什么内容等。比如:

[root@localhost ~]# read -p "请指定存放的目录:" abcd 请指定存放的目录:/opt/backup [root@localhost ~]# echo $abcd /opt/backup

5)设置变量的作用范围
默认情况下,新定义的变量只能在当前Shell环境中有效,因此称为局部变量;当进入子程序或者新的Shell时,局部变量将不能使用。比如:

[root@localhost ~]# echo "$SQL $version" SQLServer 1.2.3 1.2.3 [root@localhost ~]# /bin/sh //切换一个Shell环境 sh-4.2# echo "$SQL $version" //找不到这样的变量 sh-4.2# exit //返回上一个Shell [root@localhost ~]#

为了使用户定义的变量可以在所有Shell环境中继续使用,减少重复的工作,可以通过内部命令export将指定的变量导出为全局变量。用户可以同时指定多个变量名称作为参数(无需使用“$”符),变量之间用空格分割即可!

[root@localhost ~]# export SQL version [root@localhost ~]# /bin/sh sh-4.2# echo "$SQL $version" SQLServer 1.2.3 1.2.3 //测试成功

6)数值变量的运算
在Bash Shell环境中,只能进行简单的整数运算,不支持小数运算。数值运算主要是通过内部命令expr进行。
常用的变量:

加法运算:+

减法运算: -

乘法运算: *

除法运算: /

求模(取余)运算: %

比如:

[root@localhost ~]# x=35 [root@localhost ~]# y=16 [root@localhost ~]# expr $x + $y 51 [root@localhost ~]# expr $x - $y 19 [root@localhost ~]# expr $x \* $y 560 [root@localhost ~]# expr $x / $y 2 //只取整数 [root@localhost ~]# expr $x % $y 3 2.环境变量

环境变量指的处于运行需要由Linux系统提前创建好的一类变量。环境变量的值由Linux系统自动维护,会随着用户状态的改变而改变。
使用env命令可以查看当前的所有环境变量,以便了解各个变量的用途!
在Linux系统中,环境变量的全局配置文件为/etc/profile,在此文件中定义的变量作用域所有用户。每个用户也有自己的环境变量配置文件(~/.bash_profile)。

3.位置变量

当执行命令行操作时,第一个字段表示命令字或脚本程序名,其余的字符串按照从左到右的顺序依次赋值给位置变量。
位置变量也称为位置参数,使用$1、$2…$8、$9表示。比如:

[root@localhost ~]# vim 123.sh #!/bin/bash //声明使用何种Shell SUM=`expr $1 + $2` echo "$1 + $2=$SUM" [root@localhost ~]# chmod +x 123.sh [root@localhost ~]# ./123.sh 12 34 //$1为12、$2为34时 12 + 34=46 4.预定义变量

预定义变量是由Bash程序预先定义好的一类特殊变量,用户不可修改,预定义变量的格式:

$#:命令行中位置变量的个数

$*:所有位置变量的内容

$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错

$0:当前执行的进程/程序名

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/0792d5bd728fb155e33a1a1bb4fdcb4b.html