精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● FreeBSD>>《FreeBSD使用大全》第二版>>3.3.3 shell脚本

主题:3.3.3 shell脚本
发信人: sungang(笨刚)
整理人: sungang(2003-09-16 11:41:33), 站内信件
3.3.3 shell脚本

从上面的例子中可以看出,sh具备基本的控制能力,能够处理简单的任务。这样就可以简单的将所需要的操作集中起来,放在同一个文件之内,就组成了一个脚本,而这个脚本就可以当作一个可执行的程序直接执行,这样就可以方便日常的操作和维护。

$ cat > test.sh

for COUNT1 in 0 1 2 3 4 5 6 7 8 9

do

  for COUNT2 in 0 1 2 3 4 5 6 7 8 9

  do

    echo “count is $COUNT1$COUNT2”

  done

done

^D

$ sh test.sh

执行脚本程序的最直接方式是如同上面的例子中,将脚本文件作为sh的一个参数来启动。然而,更完善的方式是直接执行脚本本身,这就需要在脚本的第一行加上”#! /bin/sh”指出解释这个脚本的程序为sh,然后为该文件增加执行属性,那么该脚本程序就可以独立执行了。

$ head -1 test.sh

#! /bin/sh

$ chmod +x test.sh

$ ./test.sh

当把所需要的操作抽象到脚本程序中之后,通常就意味着这个程序可能多次运行,这也就意味着,这个程序需要处理一些输入工作。第一种将数据输入到脚本程序的方法是使用程序参数,sh将使用内部变量$#代表参数的数量,$*代表所有的参数字符串,而$1代表第一个参数,等等。

$ cat testparam.sh

#! /bin/sh

echo “param number is $#”

echo “params is: $*”

echo “param 1 is : $1”

$ ./test.sh param1 param2 “this is param3”

如果参数中间包含空白字符,那么可以使用引号将它引起来,表示是一个参数。

第二种将数据输入到程序中的方法是让程序自身去读取输入,这可以通过read来完成。

$ cat testinput.sh

#! /bin/sh

read -p “please input:” inputvar

echo “you key in: $inputvar”

read -p “please input 2 words at least:” inputvar1 inputvar2

echo “you key in word1: $inputvar1”

echo “last is word2: $inputvar2”

$ ./test.sh

read使用”-p”作为输入提示,将用户输入的整行内容赋给相应的变量,如果要求输入多个变量,read会按照分隔符的要求,将第一个单词赋给第一个变量,其他部分赋给第二个变量。

可以注意到,这里的变量并没有使用export指令,事实上一个变量可以直接使用,当它的有效范围有限,只是一个局部变量,只在这个脚本内部,或者在命令行的一行命令中内部有效,不能影响这个脚本启动的其他外部程序。

Shell脚本本身是比较简单的,但它在很多情况下十分有效,特别是对于执行日常经常执行的维护操作,它的能力来源于Unix下命令的灵活组合能力,这就是Unix设计的主要思路之一,因此对于Unix用户来讲,掌握shell脚本是非常有用的。参考系统的rc启动脚本,能够学习到更多的脚本编程技巧,这些技巧能够大大提高日常工作的效率。

简单的shell脚本掌握起来非常简单,但如果使用它来实现一些高级功能,shell脚本的处理能力有时候就不够了,这些时候,例如 awk、perl、python等高级脚本语言更为有效。

[关闭][返回]