Shell中的变量

变量的定义

shell中的变量的定义规则
shell中的变量在使用之前无需定义,可以在使用的同时创建
shell中的变量没有明确的分类,一般情况行啊,一个变量保存一个串
Shell中的变量若要进行计算,需使用工 具程序进行转换。
Shell变量的变量名由字母、数字和下划线组成,开头只能是字母或下划线。
若shell变量中出现其他字符,则表示变量名到此为止
给变量赋值时,等号两端不能有空格, 其格式为"变量名=值”,若要给变量赋空值 ,缺省格式中”值”的部分,跟上换行符即可。
若变量中含有空格,必须使用引号将变量括起

除了普通变量外,Shell脚本中还会用到一些特别的变量,包括:环境变量、位置变量、标准变量、和特殊变量

环境变量(永久变量):

此类变量不仅可以所有于单个脚本,还可以用于创建该变量的Shell以及该Shell的派生子Shell或者进程。
环境变量使用“export”关键字设定或创建,若要将一个本地变量更改为环境变量,可以使用以下方法:
    export  变量名
    若要创建一个环境变量,则使用以下格式:export 变量名 = 值

位置变量: 

位置变量即执行脚本时传入脚本中,对应位置的变量,类似函数的参数,应用方法为“$”加上参数的位置 如:$0、 $1、$2,其中$0比较特殊,表示脚本的命令,其余的一次表示传入脚本的第一个、第二个参数等。

  执行sec.sh 及运行结果。

#!/bin/sh
echo "number of vars:"$#
echo "number of shell script:"$0
echo "first var:"$1
echo "second var:"$2
echo "third var:"$3
exit 0

 Shift命令:使用shift可以移动位置变量对应的参数,shirt每执行一次,参数顺序左移一个位置,移出去的参数不可再用。若在sec.sh中添加如下内容: 

#!/bin/sh
echo "number of vars:"$#
echo "number of shell script:"$0
echo "first var:"$1
echo "second var:"$2
echo "third var:"$3
shift
echo "first var:"$1
echo "second var:"$2
echo "third var:":$3

exit 0

运行结果 

标准变量

标准变量也是环境变量,在bash环境建立时生成,该变量自动解析,通过查看etc目录下的profile文件可以查看系统中的标准环境变量;使用evn可以查看系统中的环境变量,包括环境变量和标准变量

 特殊变量

Shell中定义了一下特殊的变量,这些变量及含义分别如下。(这部分参考:http://c.biancheng.net/cpp/view/2739.html)

特殊变量列表
变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同。
$? 上个命令的执行情况,0表示执行成功,其他表示执行失败。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

$* 和 $@ 的区别


$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。
但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
下面的例子可以清楚的看到 $* 和 $@ 的区别:

#!/bin/bash
echo "\$*=" $*
echo "\"\$*\"=" "$*"

echo "\$@=" $@
echo "\"\$@\"=" "$@"

echo "print each param from \$*"
for var in $*
do
echo "$var"
done

echo "print each param from \$@"
for var in $@
do
echo "$var"
done

echo "print each param from \"\$*\""
for var in "$*"
do
echo "$var"
done

echo "print each param from \"\$@\""
for var in "$@"
do
echo "$var"
done

执行 ./test.sh "a" "b" "c" "d",看到下面的结果:

$*=  a b c d
"$*"= a b c d
$@=  a b c d
"$@"= a b c d
print each param from $*
a
b
c
d
print each param from $@
a
b
c
d
print each param from "$*"
a b c d
print each param from "$@"
a
b
c
d

退出状态

$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。不过,也有一些命令返回其他值,表示不同类型的错误。
下面例子中,命令成功执行:

$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
$echo $?
0
$

变量的运算

Shel中变量没有明确的类型,变量值都以字符串的形式存储,但Shell中也可能进行一-些算术运算,因此需要使用命令将变量中的字符串转换为数值。Shell中的运算一般通过两个命令实现: let 和 expr。

let命令可以进行算术和数值表达式的测试,let命令的使用格式如下:

let 表达式

echo "i= "$i

#!/bin/sh
i=1
echo "i= "$i
let i=i+2
echo "i=i+4"
echo "i="$i
exit 0


let命令也可以使用如下形式代替:((算术表达式))

#!/bin/sh
i=1
((i+=3)
echo "i= "$i
exit 0

 expr可以对整型变量进行算术计算,实使用expr命令时可以使两个数值直接进行计算,例如进行加法运算"3+5",则可以在命令行直接输入以下语句:

expr 3 + 5

运算结果会直接在命令行输出。若是通过变量的引用进行计算,添加 "$"  即可。

说明:
若表达式中是遍历,使用“$"引用即可。
运算符与变量或数据之间需要有一个空格
若要在脚本中使用expr命令,需要使用符号' ` '(该按键一般位于Tab键之上)将其内嵌到等式当中。

#!/bin/sh
a=10
b=20
value=`expr $a + $b`
echo "vlaue is:"$value
exit 0

运行结果:

[rwenjie@localhost shCode]$ vim testexpr.sh
[rwenjie@localhost shCode]$ ./testexpr.sh
vlaue is:30
[rwenjie@localhost shCode]$ 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

发布了20 篇原创文章 · 获赞 3 · 访问量 1270
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览