分类: LINUX
2012-02-27 11:07:55
本地和全局 shell 变量
1. 局部变量
a) 当引用shell时,只有创建它的shell能够知道变量的存在
2. 全局变量
a) 执行shell命令来创建子shell(bash、sh等)
b) shell中创建的变量是局部于创建它的 shell ,除非使用export命令将该变量全局化
c) 可以被各个子shell共享
3. 环境变量: 通过改变这些变量的值,用户能够定制此环境一些环境变量的例子HOME, PATH, PS1, PS2, LOGNAME, SHLVL, 及 SHELL等
HOME变量
a) Linux系统中的每个用户都有一个相关的称作HOME的目录
b) 当一个用户登录后,他/她进入相应的HOME的目录
echo $HOME
PATH 变量: 包含一列用冒号定界的目录的路径名字,便于可执行程序的搜索
PS1变量: PS1(Prompt String 1)变量包含了shell 提示符,$ 符号
PS1="HELLO>"
HELLO>
PS2 变量: 是为第二个提示符设置值的环境变量
LOGNAME 变量:包含用户的注册名字;echo "${LOGNAME}"
SHLVL 变量: 该变量包含你当前工作的shell level
SHELL变量: 环境变量存储了用户的缺省shell
env 命令
可用来查看所有已定义的环境变量表和它们各自的值
定义环境变量
export TEST="Mypath“
在系统配置文件中定义环境变量 /etc/profile
在最后一行加入export VAR1=hello,重启Linux,然后查看环境变量
4. 位置变量
指shell程序在运行时传入的参数。被存放在1-9的9个变量名中,被形象地称为位置变量。位置$0为bash
#!/bin/bash
#var.sh
echo $1
echo $2
echo $3
授权:chmod +x var.sh
执行:./var.sh I love china
命令替换
在单个命令行中使用多个命令的另一种方法(非Pipes)是通过命令替换
1.例子
echo "The date is `date`"
or
echo "The date is $(date)"
expr 命令
用于求值算术表达式。该命令的输出被发送到标准输出
expr 4 + 5 将在屏幕上显示9
a) expr 4+5
a) $((expression))
条件执行
test 或者 [] 命令
1. 求值表达式,并返回true (0)或 false(1)
2. -a and逻辑运算符 –o or逻辑运算符
if..then..[elif]..else 构造
1. Linux shell提供了循环和判定的构造,可以在shell脚本中使用
2. 结合test或者[ ]使用
3. 必须有结束符fi
算术测试
1. 结合if构造,它可用于测试变量的数字值
2. 结合if构造,它可用于测试变量的数字值
i. -eq 等于
ii. -ne 不等于
iii. -gt 大于
iv. -ge 大于或等于
v. -lt 小于
vi. -le 小于或等于
例子
echo "Enter the percentage of calls answered same day."
read actual
if [ $actual -le 80 ]
then
echo "Your Grade is Average."
elif [ $actual -gt 80 -a $actual -le 90 ]
then
echo "Your Grade is Good."
else
echo "Your Grade is Outstanding."
fi
case
shell脚本中使用的这个构造依据变量的值而执行一组特定指令
当变量的值和其中一个指定的值相匹配时,就执行写在该值下的一组命令
每一组命令必须以;;隔开
case $varname in
1.value1) …..;;
2.value2)…..;;
3. *) ….
esac
迭代
while 构造
while <条件>
do
<命令(s)>
Done
只有条件为真时,就执行do和done之间的命令
until构造
until循环构造的求值模式于while循环相反。until循环将继续执行直到求值的条件为真。
for 构造
for variable_name in
do
…
done
break 和 continue 命令
break命令引起终止循环
continue命令的使用将强迫一个新的重复
数组
1. 数组赋值:
(1) array=(var1 var2 var3 ... varN)
(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)
(3) array[0]=var1
array[1]=var2
...
array[n]=varN
2. 计算数组元素个数:
${#array[@]} 或者 ${#array[*]}
注:BASH的特殊参数 @ 和 * 都表示“扩展位置参数,从1开始”
echo ${array[n]}
从“标准输入”读入n次字符串,每次输入的字符串保存在数组array里
#!/bin/bash
#array.sh
i=0
n=5
while [ $i -lt $n ] ;
do
echo "Please input strings ... "
read array[$i]
b=${array[$i]}
echo "$b"
i=`expr $i + 1`
done
小结
1. Shell脚本允许输入/输出、操纵变量、和强有力的控制流以及编程的迭代构造
2. echo命令被用于在屏幕上显示消息
3. 通过带有#符号的前缀语句,Shell脚本中可以包含注解入口
4. 当引用一个变量时,只有创建它的shell知道该变量
5. export命令可用于从父shell向子shell参数传递
6. 一些环境变量是HOME, PATH, PS1, PS2, LOGNAME, SHLVL, 及 SHELL
7. 命令替换中使用重音符
8. expr命令用于求值算术表达式
9. 使用命令替换计算算术表达式
10.test 和 [ ]命令用于求值条件
11.在shell脚本中if 和 case构造用于判定
12.While,until和 for构造用于创建执行重复任务的shell脚本
13.Break命令用于终止一个循环,而continue命令再开始循环