用Shell写脚本--Shell脚本编程常用功能(菜鸟级

系统 1170 0

Shell编程

一,Shell编程的基本知识

1. S hell 是内核的外壳

Shell 是一种具备特殊功能的程序,是用户和 Unix/Linux 内核间的一个接口。这样用户向 Shell 提出请求, Shell 解释器解释请求并将请求传递给操作系统内核。

Shell 的标准有很多,包括 BourneShell(sh) Korn Shell(ksh) CShell(csh) Bourne Again Shell(bash) 等。

使用 echo $SHELL 可以查看当前环境的 Shell 标准。

任何在命令行中可键入执行的命令都可以放在 Shell 程序中执行。本质上, Shell 脚本是命令组合到一个文件里面。

2. Shell 的编程规范

一般将脚本命名为 ScriptName.sh sh Shell ,表示是 Shell 脚本。当然名字不影响功能。

Shell 以类似 #!/bin/sh 的语句开始,以告知系统使用何种程序解释运行该脚本。习惯上第二行作注释,表明脚本的名称,第三行则注释脚本的功能。

对编写的脚本执行命令 chmod u+x ScripName ,以使脚本具有可运行的执行权限。运行方式为: ScriptName 或者 ./ScriptName

可以在脚本运行时打印一些帮助信息:

#The help document

cat<<ScriptInformation

--This is the Author Information--

Thanks for using this Script!

Base Info:

Writen By: IterZebra

E-mail: IterZebra@gmail.com

--End--

ScriptInformation

ScriptInformation 是用户给该文档取的名字,用以标识文档的开始和结束。

3. Shell 中的条件测试

条件测试命令为 test ,命令执行是否成功可以由 $? 标识,是 0 则表示测试成功,否则表示失败。同时,可以使用“ [] ”语句来表达 test 命令。

常用的文件测试命令有:

-d 目录 -r 可读

-f 常规文件 -w 可写

-L 符号连接 -x 可执行

-s 文件长度大于 0 ,非空 -u 文件的 suid 位设置

常用的逻辑操作符有

-a 逻辑与,符号两边都为真,结果为真

-o 逻辑或,符号两边一边为真,结果为真

!逻辑否,条件为假,结果为真;条件为真,结果为假

常用的字符串测试有

= 字符串相等 -z 空串

= 字符串不相等 -n 非空串

常用数值测试有:

-eq 相等 -ne 不相等

-gt 大于 -ge 大于等于

-lt 小于 -le 小于等于

进行数值测试的两边应该是值(即用 $ 符号),结果值类型是 boolean

4. Shell 中的变量定义

如果设置变量,并不想再改变其值,可以将其设置为只读,只要在变量名前加 readonly 即可。

使用 set 命令可以显示所有本地定义的 Shell 变量。

使用 unset+ 变量名可以清除对变量的定义。

Shell 中的变量分为:用户自定义变量、环境变量、位置变量、特定变量。

用户自定义变量:用户自己定义的变量。

环境变量:环境变量用于所有用户,必须使用 export 导出。

位置变量: $0 是脚本名称, $1~$9 是脚本参数。

特定变量:脚本运行时的相关信息。

特定变量包括:

$# 传递到脚本的参数个数。

$* 传递到脚本的参数列表(类似指针,直接输出值则会打印所有参数),可以超过 10 个。

$$ 脚本运行时当前的进程 ID 号,常用作临时变量的后缀,如: haison.$$

$! 后台运行的最后一个进程的 ID 号。

$@ $# 类似,使用时加引号,并将个数返回到引号中。

$- 上一个命令的最后一个参数。

$? 上个命令的退出状态返回值。 0 表示没错误,其他有对应错误发生。

5. Shell 中的控制语句

包括选择和循环控制语句。

5 .1 选择:

if 语句:

if [ 条件 1] then DO1 elif [ 条件 2] then DO2 else DO3 fi

语义为:如果 [ 条件 1] DO1 ,否则如果( elseif [ 条件 2] DO2 否则 DO3

case 语句:

case in

1

DO1

;;

2)

DO2

;;

*)

DO3

;;

esac

语义为:值如果等于值 1 DO1 ,如果等于值 2 DO2 ,一旦匹配到一个,则退出。 *) 为匹配所有值,因而应该放在最后。

5 .2 循环:

for 语句:

for 变量名 in 列表

do

DO

done

语义为:对变量依次赋予列表中的值,并执行 DO ,直到列表遍历完毕。

until 语句:

until 条件

do

DO

done

语义为:执行 DO ,直至条件为真。

while 语句:

while 命令

do

DO

done

语义为:只有当命令(比如 r ead $MyString )的退出状态为 0 (表示没有错误), DO 才会执行;当命令是测试命令的时候,必须测试结果是真才会被执行。

6. Shell 其他知识

Linux 黑洞指的是虚拟设备 /dev/null ,任何对 /dev/null 的写操作都会执行成功,但是数据会消失,没有任何反馈,因此将不显示的信息送往 /dev/null 是比较常见的做法:

ls –l > /dev/null 。该命令将显示的文件详细信息输出到 /dev/null 虚拟文件。这样该详细信息实际上消失了。该虚拟设备还可用以清空文件的内容:

cat /dev/null > FileName 。该命令将文件“串接”后输出到目标设备或文件。这里即把不存在信息的 /dev/null 输出到 FileName ,这样 FileName 文件的信息被清空。

7. Shell 的编程环境

Cygwin Windows 平台下的一种 Linux 模拟环境,是由 cygnus solutions 公司开发的自由软件。其使得 gcc gdb gas 等开发工具可以生成 win32 的目标文件。开发者使用 win32 API 写了 Unix 系统库的模拟层,只要将开发工具的源代码和这个模拟层库 (cygwin DLL) 链接在一起,就可以使用 Unix 主机上的交叉编译器生成 Windows 平台上的运行的工具集。

软件下载: cygwin 的官方网站, www.cygwin.com

推荐下载: http://www.macraigor.com/full_gnu.htm

软件安装:安装完后要修改 cygwin 目录下的 cygwin.bat 文件 , @echo off 后面加上 set CYGWIN=title ntea ,这是因为 Cygwin 的启动批处理文件需要启动 Unix 文件系统模拟。

8. Shell 的环境定制及调试相关

改变环境变量可以定制环境,例如增加分隔符等(略)。

加入自己的命令和函数

function( )

{

body

}

必须把函数定义放在脚本开始部分,以使 shell 解释器可以及早发现。

使用其函数名 调用函数, 传给 数的 量跟在函数后面。

函数里面定 量以下划 线 _ 始。

函数可以放在同一个文件 ,也可以放在只包含函数的 独文件中 。该函数单独

件也必 #!/bin/sh 开头

例如程序:

#Directory and Prompt change program

#Syntax: chdir directory

if [ ! -d "$1" ]

then

echo "$1 is not a directory"

exit 1

fi

cd $1

PS1=`pwd`$

export PS1

其作用是如果参数指定的目录存在,则跳转到目录,并且该 Shell 会将 PS1 传递到子 Shell 中。

如果将上述保存到脚本,并运行,则发现,由于当前 Shell 的变量没有受到影响,因此新的目录不会在当前 Shell 显示(即 cd 命令不是改变当前 Shell 的)。

当前的 Shell 即命令行,如果 cd 在当前执行,会导致跳转。但是该脚本文件中的 cd 是在子 Shell 中执行的,所以不会在当前 Shell 即命令行中发生提示符的改变。

为达到改变当前 Shell 的目录,可以把改变函数写在个人函数文件,例如以 .persfuncs (任何都可以,比如用 txt )命名,然后在当前 Shell 即命令行直接导入并调用。

例如:

建立个人函数:

# /bin/sh

function chdir()

{

#Directory and Prompt change program

#Syntax: chdir directory

if [ ! -d "$1" ]

then

echo "$1 is not a directory"

exit 1

fi

cd $1

PS1=`pwd`$

export PS1

}

将上述保存为 MyFunctionName.persfuncs

在当前 Shell 即命令行中

这样导入: .[ 空格 ]/ 路径 /MyFunctionName.persfuncs 通过导入告知系统该文件是个人函数文件,调用的命令可以到这里查询。

这样就可以直接调用了,例如 chadir MyPath

则跳转到当前目录下的 MyPath 目录

有条件的命令替换

Bourne Shell 中可以使变量替换在特定条件下执行即有条件的环境变量替换

margin: 0

分享到:
评论

用Shell写脚本--Shell脚本编程常用功能(菜鸟级)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论