014-Shell编程之02变量和运算符
本帖最后由 moc 于 2018-11-18 12:36 编辑1、变量
shell中的变量有本地变量,环境变量,变量替换(显示变量),位置变量,标准变量,特殊变量等。
1. 本地变量
本地变量在用户现有shell的生命期的代码中使用。
定义本地变量: variablename=value
如: MYVAR=”test” ==> 注意=左右不要有空格
使用本地变量:$MYVAR
如:echo $MYVARORecho ${MYVAR}
显示所有本地变量:set
设置本地变量只读:readonly variablename
如:readonly MYVAR
注意: 每登录一个终端,都会运行一个shell程序,这个本地变量,就保存在这个shell程序中;如果重新登录,将启动新的shell程序,原来本地变量将消失。
2. 环境变量
环境变量用于所有用户进程。不像本地变量(只用于现在的shell),环境变量可用于所有子进程,这包括编辑器、代码和应用程序。
当前用户的环境变量: $HOME/.bash_profile
所有用户的环境变量: /etc/profile
声明环境变量: export variable
查看当前shell的环境变量:env
3. 变量替换(显示变量)
在变量名前加$,使用echo命令可以显示单个变量取值。
如: echo ${MYVAR} 或者echo $MYVAR
$(variablename)|显示实际值
$(variablename:+value)|若设置了variablename,则显示;否则空
$(variablename:?value)|若未设置variablename,则显示用户自定义信息valude
$(variablename:-value)|若未设置variablename,则显示其值
$(variablename:=value)|若未设置了variablename,则设置其值,并显示
4. 位置变量
位置变量表示$0 $1 $2 $3 …$9;$0 代表bash文件名称 其他就是命令行参数。
#!/bin/bash
# 位置参数
echo "代码的名字 $0"
echo "parm 1: $1“
echo "parm 2: $2"
echo "parm 3: $3
5. 标准变量
bash默认建立了一些标准环境变量,可在/etc/profile中定义.
HOME ==>家目录, 测试echo $HOME
IFS ==>linux系统中字符之间的间隔字符
MAIL ==>当前用户的邮箱路径
TERM ==> 当前终端的类型
PATH ==> shell的标准变量
PS1 ==> 提示符,即终端输入命令时前面的一串字符
PS2 ==> 续行时的提示符,默认为"> "
SHELL==> 当前运行的shell类型
6. 特殊变量
$# ==> 传递到代码的参数个数
$* ==> 以一个单字串显示所有向脚步传递的参数,与位置变量不同,次选项参数可以超过9个。
$$ ==> 代码运行的当前进程ID号
$! ==> 后台运行的最后一个进程的进程ID
$@ ==> 与$#相同,但是使用时加引号,并在引号中返回每个参数
$- ==> 显示shell使用的当前选项,与set命令功能相同
$? ==> 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误
#!/bin/bash
# 特殊变量
echo "代码的名字 $0"
echo "parm 1: $1"
echo "parm 2: $2"
echo "parm 3: $3"
echo "显示参数的个数:$#"
echo "显示代码全部参数:$*"
echo "显示前一命令运行后状态:$?"
7. 影响变量的命令
unset variable==>清除变量;测试 echo $testvar
注: readonly的变量,不能被清除。
export ==>创建环境变量
readonly==>设置变量只读
shift ==>调整位置变量的位置
2、引号
1. 双引号
使用双引号可以引用除字符$,`反引号,\反斜杠外的任意字符或者字符串。
如:echo -e " hello world, $SHELL '\n* hiThis 'echo $myvar' "
2. 单引号
让所有的特殊字符都失去意义。
如: echo -e ' hello world, $SHELL '\n* fishC '
3. 单反引号
反引号中的内容将作为一个系统命令,并执行其内容。
如: echo “* fishC.bbs `echo $PATH`”
4. 反斜杠
如果一个字符有特殊含义,反斜杠屏蔽其特殊含义。
含有的特殊字符:$*+^`‘’|?
如: echo * echo \*
3、运算符
1. 按位运算符
~op1 ==> 反运算符
op1<<op2 ==> 左移运算符
op1>>op2 ==> 右移运算符
op1 & op2 ==> 与比较运算符
op1 ^ op2 ==> 异或运算符
op1 | op2 ==>或运算符
如:echo $
注:$[ ] 表示形式告诉shell对方括号中的表达式求值。
2. 逻辑运算符
&&==> 逻辑与运算
|| ==> 逻辑或运算符
如: echo $
3. 算术运算符
+, -, ×, /, %
如:echo $
3. 赋值运算符
=,+=,-=,*=,/=,%=,&=,^=、|=,<<=,>>=
如: let myvar+=myvar
4、表达式替换
$[表达式]或$((表达式))
所有shell的求值都是用整数完成。
$[]可以接受不同基数的数字 ==> n表示基数从2到36任意基数.
如: $ echo $
页:
[1]