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

版权声明:本文为kadinzhu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/kadinzhu/archive/2011/04/06/2059543.html