分类:
2012-06-04 09:21:57
原文地址:shell的强大功能实例珍藏<一> 作者:goodspeed_517
======================================GNU/LinuxFreeBSD======================================================
if then else语句
i f语句测试条件,测试条件返回真( 0)或假(1)后,可相应执行一系列语句。i f语句结
构对错误检查非常有用。其格式为:
if 条件1
then 命令1
elif 条件2
then 命令2
else 命令3
f i
让我们来具体讲解i f语句的各部分功能。
If 条件1 如果条件1为真
Then 那么
命令1 执行命令1
elif 条件2 如果条件1不成立
then 那么
命令2 执行命令2
else 如果条件1,2均不成立
命令3 那么执行命令3
fi 完成
i f语句必须以单词f i终止。在i f语句中漏写f i是最一般的错误。我自己有时也是这样。
e l i f和e l s e为可选项,如果语句中没有否则部分,那么就不需要e l i f和e l s e部分。I f语句可以
有许多e l i f部分。最常用的i f语句是if then fi结构。
if...then是最常见的条件判断语句,简而言之,就是符合某个条件判断的时候,就予以进行某项工作就是了,我们可以简单地这样子看:
if [ 条件判断表达式 ]; then
当条件判断表达式成立时可以执行的命令
fi
较特别的是,如果有多个条件判断时,可以将多个判断写入一个中括号,还可以使用多个中括号隔开,而括号和括号之间,则以&&或||来隔开,这个要和命令行中的&&,||区别开来。
下面看一些例子。
变量值测试
通过测试设置为接受用户输入的变量可以测知用户是否输入信息。下面的例子中测试用户键入
r e t u r n键后变量n a m e是否包含任何信息。
=====================================GNU/LinuxFreeBSD==================================
注意,文件可能没找到,系统也产生本身的错误信息,这类错误信息可能与输出混在一
起。既然已经显示系统错误信息获知脚本失败,就没必要显示两次。要去除系统产生的错误
和系统输出,只需简单的将标准错误和输出重定向即可。修改脚本为: >/dev/null 2>&1。
上面当中>/dev/null表示任何标准输出都定向到那个无尽的“黑洞”/de/null中,然后2>&1表示
错误输出也是到/dev/null中,&1表示前面的那个/dev/null,脚本运行时,所有输出包括错误重定向至系统垃圾堆。
当前目录测试
当运行一些管理脚本时,可能要在根目录下运行它,特别是移动某种全局文件或进行权
限改变时。一个简单的测试可以获知是否运行在根目录下。下面脚本中变量D I R E C TO RY使用
当前目录的命令替换操作,然后此变量值与" / "字符串比较( /为根目录)。如果变量值与字符
串不等,则用户退出脚本,退出状态为1意味错误信息产生。
文件权限测试
可以用i f语句测试文件权限,下面简单测试文件t e s t . t x t是否被设置到变量L O G N A M E,测试test.txt文件是否具有写的权限。下面的脚本先建立一个test.txt的空白文档,列出它的相关权限。然后执行脚本测试其是否可以写入,然后显示相关信息。
测试传递到脚本中的参数
i f语句可用来测试传入脚本中参数的个数。使用特定变量$ #,表示调用参数的个数。可以
测试所需参数个数与调用参数个数是否相等。
以下测试确保脚本有三个参数。如果没有,则返回一个可用信息到标准错误,然后代码
退出并显示退出状态。如果参数数目等于3,则显示所有参数。
从上面的运行信息可以看出,如果只传入两个参数,则显示一可用信息,然后脚本退出。
只有正确传入了三个参数了,才显示所有的参数然后退出。
决定脚本是否为交互模式
有时需要知道脚本运行是交互模式(终端模式)还是非交互模式( c r o n或a t)。脚本也许
需要这个信息以决定从哪里取得输入以及输出到哪里,使用t e s t命令并带有- t选项很容易确认
这一点。如果t e s t返回值为1,则为交互模式。假如我是在一个终端下运行下面这个脚本。
简单的if else语句
下一个i f语句有可能是使用最广泛的:
if 条件
t h e n
命令1
e l s e
命令2
f i
使用i f语句的e l s e部分可在条件测试为假时采取适当动作。
变量设置测试
下面的例子测试环境变量E D I TO R是否已设置。如果E D I TO R变量为空,将此信息通知用
户。如果已设置,在屏幕上显示编辑类型。
=====================================GNU/LinuxFreeBSD==================================
这些东西很是有用,暂时先到这里这些还得慢慢品;改日继续。希望这份转载的笔记对我对大家都带来
帮助让大家更容易理解和书写shell脚本;后面的内容会更加精彩同时也会展现出shell更强大的功能。