Linux Shell编程(二)--Shell变量及相关操作

转载 2012年03月27日 21:30:21

Shell中变量的类型分为:


环境变量:Shell预定义的,用于设置系统运行环境的变量,由系统统一命名。常用的有HOME:用户主目录的全路径名;PATH:执行命令或Shell脚本时的查找路径,不同路径由冒号分隔;TERM:终端类型;PWD:当前工作目录的绝对路径;PS1:主提示符。根用户默认为“#”,普通用户默认为“$”,可以重新设置该值;PS2:辅助提示符,命令行中输入“\”再按回车,将显示辅助提示符,默认为 “>”;SHELL:Shell解释器的路径;MAIL:系统信箱的路径;LOGNAME:登录用户的用户名;UID:当前用户的UID。env或 set命令可以显示 和设置当前环境变量。

位置变量:命令可以接受多个参数,如command arg1 arg2 ...。在脚本中,可以通过位置变量来得到这些参数。$0对应当前执行的命令名,$1~$9表示第1到第9个变量。shift可以用来将参数左移,比如 shift操作后,$1将等同与原来的$2。shift 2移动两位,使$1等同于原来的$9。多于9个参数时需要shift来读取多于9位的参数。

预定义的特殊变量:与环境变量类似,不同的是该类变量具有特殊的含义,其值不能由用户重新设置。常用的有:$#:实际位置参数个数(不包括Shell脚本名),$*:命令行中的所有位置参数组成的字符串;$!:上一个后台命令对应的进程号;$?:最近一条命令执行后的退出状态(返回值),为十进制数;$$:当前进程号PID。

用户自定义变量:建议使用大写字母表示,与命令名相区别。


变量的操作有:

创建变量:内置命令declare和typeset可用于创建变量,例如declare -r可创建只读变量。不带任何选项的declare命令列出所有设置的变量。变量名=变量值的方式可以直接创建变量,如VAR=20。使用变量时用$变量的方式,如$VAR。

区分变量名:变量和字符串混用时,容易引起混淆。定义变量NAME=tommy,命令echo "my name is $NAME123"会输出“my name is”,因为变量NAME123不存在,用花括号来区分:echo "my name is ${NAME}123”。

删除变量:unset 变量名。


变量的赋值可以使用以下方法:

使用read命令赋值:从标准输入或文件读取数据。如:read 变量1 变量2,此时脚本暂停执行而等待键盘的输入。多个数据或变量之间用空格分隔;若变量个数与数据个数相等,则对应赋值;若变量个数更多,则没有输入数据的变量取空值;若变量个数更少,则将多余的数据赋值给最后一个变量。如果read成功,则返回0,如果读到EOF,则返回非零值。

直接给变量赋值:变量名=变量值。赋值时不能使用美元符“$”,且等号前后不可有空格。

使用命令行参数赋值:用户向命令行传入参数,使得$1~$9有值。

利用命令的输出结果赋值:使用反引号(`)。如:CURRDIR=`pwd`。还可以用命令替换的方法如: a=$(pwd)  echo "$a" 

从文件读入数据实现赋值:例如脚本:
ls * > files
while read LINE
do
    echo $LINE
done < files
表示while结构从文件“files”里每次输入一行并输出到标准输出。


变量的输出有以下方式:

echo命令:直接输出变量的值。

printf命令:格式化输出变量。与C语言不同,这个printf命令的参数之间不需要逗号分隔:printf "%d" 59。type printf命令可以输出命令printf的类型。


数组变量

数组的定义:array=(1 2 3 4 5)定义一个数组并赋值。而a[0]=1 a[1]=2 a[2]=3同样创建一个数组。通过${array[1]}的形式可以使用数组元素。

数组的复制:两个特殊索引“@”和“*”,可以用来复制数组。例如:copy=(${array[@]})与 copy=(${array[*]})等价,都将array数组复制到copy数组里,而带引号时,copy=("${array[@]}")与 copy=("${array[*]}")意义不同,前者仍然把数组array复制到数组copy里,两个数组元素相同;而后者把array数组里的所有元素以分隔符(通常是空格)分开作为一个元素传入copy里,此时copy只有一个元素。不带圆括号的赋值也是这个效果:copy=$array[@]与 copy=$array[*]都将得到一个元素个数为1的数组。(其实就是一个普通变量。)

数组元素的个数:${#array[*]}返回数组的元素个数。

数组元素的长度:${#array[2]}返回下标为2的元素的字符串长度。


算术运算
Bourne Shell没有内置的算术运算,不能直接加、减、乘、除。对于整型运算可以使用expr或let,而浮点或更复杂的运算可以使用awk或bc。

expr
:x=`expr $a + $b`。此处是反引号。

let
:let x=x+1。

awk
:result=`awk 'BEGIN {x=1.2;y=2.3;printf "%f",x+y }'`。整个awk命令被反引号包含。

Linux Shell编程(10)——引用变量

当要引用一个变量的值时,一般推荐使用双引号。使用双引号除了变量名前缀($)、后引符(`)和转义符(\)外,会使shell不再解释引号中其它所有的特殊字符。用双引号时$仍被当成特殊字符,允许引用一个被双...
  • yincheng01
  • yincheng01
  • 2014年09月30日 07:28
  • 3659

Shell编程入门总结(二)

本文的主要内容: 1、流程控制:while/until 循环 2、流程控制:case 分支 3、流程控制:for 循环 4、位置参数...
  • CSDN_SXL
  • CSDN_SXL
  • 2016年04月29日 23:50
  • 3027

Linux Shell 变量自加

declare -i iv=$svnv let iv+=1 shell中变量自增的实现方法 Linux Shell中写循环时,常常要用到变量的自增,现在总结一下整型变量自增的方法...
  • dj0379
  • dj0379
  • 2016年03月21日 14:42
  • 4996

Linux Shell中的变量-环境变量

参考:《Linux命令 / 编辑器与Shell编程》 ################################################ note that :与其他编程语言不同,B...
  • u012005313
  • u012005313
  • 2015年10月07日 15:12
  • 1048

Linux shell脚本编程入门 (一)

环境变量 一些命令 shell脚本中经常出现各种环境变量,因此要写脚本,必须先来了解环境变量.常见的处理环境变量的命令,列举在下面 set 用来显示本地变量env 用来显示环境变量export 用...
  • zhangxb35
  • zhangxb35
  • 2015年01月04日 21:45
  • 947

Linux中shell变量说明

原文地址:http://123304258.blog.163.com/blog/static/12354702012423113850772/  为使shell编程更有效,系统提供了一些shell变量...
  • Jeanphorn
  • Jeanphorn
  • 2015年08月11日 12:24
  • 2373

shell内部变量

$BASH            Bash的二进制程序文件的路径 $BASH_ENV        这个环境变量会指向一个Bash的启动文件,当一个脚本被调用的时候,这个启动文件将会被读取 $BA...
  • sean_xiang
  • sean_xiang
  • 2013年07月09日 15:11
  • 886

技术干货:Linux Shell 编程基础,看这一篇就够了!

技术干货:Linux Shell 编程基础,看这一篇就够了!
  • qq_22075977
  • qq_22075977
  • 2017年07月16日 19:36
  • 824

linux shell中 if else以及大于、小于、等于逻辑表达式介绍

比如比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。 注意:这里的空格很重要。要确保方括号的空格。笔者就曾因为空格缺少或位置不对,而浪费好多宝贵的时间。 if .....
  • EI__Nino
  • EI__Nino
  • 2014年07月28日 18:13
  • 8664

Linux —— Shell编程之变量赋值和引用

Linux —— Shell编程之变量赋值和引用 Linux的shell编程是一种非常成熟的编程语言,它支持各种类型的变量。有三种主要的变量类型:环境变量、内部变量和用户变量。 ...
  • boshuzhang
  • boshuzhang
  • 2016年08月15日 10:32
  • 17550
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux Shell编程(二)--Shell变量及相关操作
举报原因:
原因补充:

(最多只允许输入30个字)