shell编程入门(1)
shell程序是一个包含UNIX命令的普通文件,这个文件的权限应该可读和可执行。和普通可执行程序一样,执行shell程序的时候要么指定完全路径名,或者将其放在PATH环境变量指定的路径列表中。
和普通的程序一样,shell程序包含三种控制结构:顺序结构、判断和循环结构。
shell程序的第一行应包括#!/bin/sh表示该文件是一个可执行程序,需要被shell解释
1. 给shell程序传递参数
给shell程序传递参数的方式之一是使用环境变量,注意环境变量和shell变量的区别。传递参数的方式:
#!/bin/sh echo “you are running in xxx.sh” echo “value of color is $color” # export color=black # ./xxx.shyou are running in xxx.shvalue of color is black
给shell传递参数的另一种方式是使用命令行参数:
shell程序中可以用$加数字的变量来引用命令行参数:
¡$0 表示命令本身
$1 表示第1个参数
$(12) 表示第12个参数
$# 表示命令行参数的数量
$* 则表示所有的命令行参数
#!/bin/sh echo “There are $# arguments” echo “Thay are $*” echo “The first argument is $1”
其中$#和$*都不包含$0。
可以传递$*给接收多个参数的命令:
#!/bin/sh echo “$0 will install $# files to bin directory” chmod a+x $* mv $* $HOME/bin echo “Install OK!”
2. shift命令
命令格式:shift [n]
功能:将$*中的参数序列向左移动n个位置,并且将$#的值减少n。shift命令不会影响$0,该命令一旦完成,被移出的参数就会丢失,如果需要,应该在shift移出之前保存这个参数。
#!/bin/sh orig_args=$* echo “There are $# arguments” echo “Thay are $*” shift 2 echo “There are $# arguments” echo “Thay are $*”
3. read命令
命令格式:read 变量1 变量2 …功能:从标准输入读入值,并赋给指定变量。输入的值之间用空白字符分隔开,分别赋给对应的变量,如果变量属多于值的数量,多余的变量设置为空,如果值的数量多于变量,多余的值将一并赋给最后一个变量。
read命令一次读入整行,不能用一个read命令读入一行的一部分,而用另外一个read命令读入该行的剩余部分。
# read var1 var2 abc def ghi jkl # echo $var1 abc # echo $var2 def ghi jkl
4. 执行shell程序的方法
无论shell程序是否为可执行的,使用sh都可以在当前shell的子shell中运行这个shell程序,使用./程序名 也可以达到同样的效果。
如果想在当前shell中执行shell程序,可以使用source 程序名 或 . 程序名(注意空格)来执行。
5. 命令的返回值
可以使用$?来获取上一条命令的返回值,一般来说,0表示上一条命令正常结束,1表示上一条命令出现错误而终止。
$ true # 永远返回 0 的命令 $ echo $? 0 $ ls $ echo $? 0 $ cp cp: missing file argument Try `cp --help\' for more information. $ echo $? 1
6. test命令
test命令测试指定条件,并将结果通过返回值呈现。
语法格式:test 表达式 或简写为 [表达式]
test命令可以用作3种对象上:数字测试、字符串测试、文件测试
对于数字测试,有:
-le 小于等于 -gt 大于
-ge 大于等于 -eq 等于
-ne 不等于
$ var=12 $ [ $var -lt 24 ] # 12小于24? $ echo $? 0
对于字符串测试,有:
= != -z(字符串长度为0) -n(字符串长度非0)
[ $var = “abc” ] # 变量var等于abc? [ $var != “abc” ] [ -z “$var” ] #变量var是否长度为0 [ -n “234” ] #变量var长度是否非0
可以对文件的状态进行测试
[ -f /path/filename ] 测试 /path/filename 是否是普通文件 [ -d /path/filename ] 测试 /path/filename 是否是目录 [ -w /path/filename ] 测试 /path/filename 是否可写
可以使用 ! -a –o (非、与、或)参数进行组合测试
7. exit命令
语法格式:exit 数字
结束当前shell程序,并指定返回值
8. 在shell进行算数运算
使用 $((算术表达式)) 的方式可以进行算术运算
$ x=100 $ echo “$(($x + 23))” 123