Chinaunix首页 | 论坛 | 博客
  • 博客访问: 202554
  • 博文数量: 37
  • 博客积分: 4624
  • 博客等级: 上校
  • 技术积分: 433
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-10 14:06
文章分类

全部博文(37)

文章存档

2012年(6)

2011年(25)

2008年(6)

我的朋友

分类: LINUX

2011-12-20 18:59:09

本地变量在用户现在的shell生命期的脚本中使用。

使用变量时,如果用花括号将之括起来,可以防止shell误解变量值,尽管不必一定要这样做,但这确实可用。

 

显示变量:

$ abc=123

$ echo $abc

123

$ def="111$abc"

$ echo $def

111123

 

清除变量,使用unset 命令清除变量:

$ echo $abc

123

$ unset abc

$ echo $abc

 

 

显示所有本地shell变量,使用set命令显示所有本地定义的shell变量:

$ abcdefg=123456

$ echo $abcdefg

123456

$ set | grep "abcdefg"

abcdefg=123456

 

结合变量值,将变量并排可以使变量结合在一起:

$ ABC=abc

$ DEF=def

$ echo $ABC$DEF

abcdef

$ X="$ABC$DEF"

$ echo $X

abcdef

$ Y=$ABC$DEF

$ echo $Y

abcdef

 

测试变量是否已经设置:

$ G=alic

$ echo "this is ${G:-kate}"

this is alic

$ unset G

$ echo $G

 

$ echo "this is ${G:-kate}"

this is kate

$ echo $G

 

$ ${G:=kate}

程序“kate”尚未安装。  您可以使用以下命令安装:

sudo apt-get install kate

$ echo "${G:=kate}"

kate

$ echo $G

kate

$

 

测试变量是否取值,如果未设置,则返回一空串:

$ C=ccc

$ echo $C

ccc

$ echo "${C:+123}"

123

$ echo $C

ccc

$

 

使用变量来保存系统命令参数:

$ touch src.txt

$ ll

总用量 8

drwxrwxr-x 2 wuzhiguo wuzhiguo 4096 2011-12-20 17:29 ./

drwxrwxr-x 7 wuzhiguo wuzhiguo 4096 2011-12-12 11:07 ../

-rw-rw-r-- 1 wuzhiguo wuzhiguo    0 2011-12-20 17:29 src.txt

$ SRC=src.txt

$ DST=dst.txt

$ cp $SRC $DST

$ ll

总用量 8

drwxrwxr-x 2 wuzhiguo wuzhiguo 4096 2011-12-20 17:30 ./

drwxrwxr-x 7 wuzhiguo wuzhiguo 4096 2011-12-12 11:07 ../

-rw-rw-r-- 1 wuzhiguo wuzhiguo    0 2011-12-20 17:30 dst.txt

-rw-rw-r-- 1 wuzhiguo wuzhiguo    0 2011-12-20 17:29 src.txt

 

设置只读变量:

$ READONLY=12345

$ readonly READONLY

$ echo $READONLY

12345

$ READONLY=AAA

bash: READONLY: 只读变量

$ readonly

.....

declare -r READONLY="12345"

declare -ir UID="1000"

 

 

1.1.        环境变量

环境变量用于所有用户进程,本地变量只用于现在的shell

环境变量可以在命令行中设置,但用户注销时这些值将丢失,因此最好在.profile文件中定义。

系统管理员可能在/etc/profile文件中已经设置了一些环境变量。将之放入profile文件意味着每次登录时这些值都将被初始化。

传统上,所有环境变量均为大写。环境变量应用于用户进程前,必须用export命令导出。

环境变量与本地变量设置方式相同。

 

设置环境变量:

$ abc=123

$ export abc

$ def=456;export def

$ export ggg=999

 

显示环境变量:

echo $ggg

$ env | grep "ggg"  显示所有环境变量

ggg=999

 

清除环境变量:

unset ggg

$ echo $ggg

 

 

嵌入shell变量:

shell有一些预留的环境变量名,这些变量名不能用作其他用途。通常在

/etc/profile中建立这些嵌入的环境变量,但也不完全是,这取决于用户自己。

常见的有:

HOME

PATH

SHELL

 

其他环境变量:

还有一些预留的环境变量。其他系统或命令行应用将用到它们。以下是最常用的一些,

注意这些值均未有缺省设置,必须显示说明:

EDITOR

PWD

 

set命令:

使用set命令-a选项,即set -a指明所有变量直接被导出。不要在/etc/profile中使用这种方法,最好只在自己的.profile文件中使用。

set -a

 

将变量导出到子进程:

在父脚本中使用export导出变量,子脚本中即可使用。

export abc

 

1.2.        位置变量参数

如果要向一个shell脚本传递信息,可以使用位置参数完成此功能。

参数相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问,使用shift命令可以改变这个限制。

参数从第一个开始,在第9个结束;每个访问参数前要加$符号。

第一个参数为0,表示预留保存实际脚本名字。

在脚本中使用位置参数:

cat my.sh

#!/bin/sh

echo "param 0:$0"

echo "param 1:$1"

echo "param 2:$2"

echo "param 3:$3"

echo "param 4:$4"

echo "param 5:$5"

echo "param 6:$6"

echo "param 7:$7"

echo "param 8:$8"

echo "basename:`basename $0`"

$ ./my.sh

param 0:./my.sh

param 1:

param 2:

param 3:

param 4:

param 5:

param 6:

param 7:

param 8:

basename:my.sh

 

向系统命令传递参数:

find / -name $1 -print

 

特定变量参数:

脚本运行时的一些相关控制信息,这就是特定变量的由来。

$# 传递到脚本的参数个数

$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9

$$ 脚本运行的当前进程ID

$! 后台运行的最后一个进程的进程ID

$@ $#相同,但是使用时加引号,并在引号中返回每个参数

$- 显示shell使用的当前选项,与set命令功能相同

$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

 

$ cat my.sh

#!/bin/sh

echo "param 0:$0"

echo "param 1:$1"

echo "param 2:$2"

echo "param 3:$3"

echo "param 4:$4"

echo "param 5:$5"

echo "param 6:$6"

echo "param 7:$7"

echo "param 8:$8"

echo "basename:`basename $0`"

echo "param count:$#"

echo "param list:$*"

$ ./my.sh 1 2 3

param 0:./my.sh

param 1:1

param 2:2

param 3:3

param 4:

param 5:

param 6:

param 7:

param 8:

basename:my.sh

param count:3

param list:1 2 3

 

最后的退出状态:

可以在任何命令或脚本中返回$?以获得返回信息。返回0意味着成功,1为出现错误。

$ ls

dst.txt  my.sh  src.txt

$ echo aaa

aaa

$ echo $?

0

$ cp aaa bbb

cp: 无法获取"aaa" 的文件状态(stat): 没有那个文件或目录

$ echo $?

1

阅读(680) | 评论(0) | 转发(0) |
0

上一篇:登录环境

下一篇:引号

给主人留下些什么吧!~~