电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

两个很详细的shell 实例代码


发布日期:2020/3/4
 
两个很详细的shell 实例

一般编程步骤

现在我们来讨论编写一个脚本的一般步骤任何优秀的脚本都应该具有帮助和输入参数并且写一个伪脚本(frameworksh)该脚本包含了大多数脚本都需要的框架结构是一个非常不错的主意这时候在写一个新的脚本时我们只需要执行一下copy命令

cp frameworksh myscript

然后再插入自己的函数

让我们再看两个例子

二进制到十进制的转换

脚本 bd 将二进制数 (比如 ) 转换为相应的十进制数这也是一个用expr命令进行数学运算的例子

复制代码 代码如下:

#!/bin/sh

# vim: set sw= ts= et:

help()

{

cat < bh convert binary to decimal

USAGE: bh [h] binarynum

OPTIONS: h help text

EXAMPLE: bh

will return

HELP

exit

}

error()

{

# print an error and exit

echo $

exit

}

lastchar()

{

# return the last character of a string in $rval

if [ z $ ]; then

# empty string

rval=

return

fi

# wc puts some space behind the output this is why we need sed:

numofchar=`echo n $ | wc c | sed s/ //g `

# now cut out the last char

rval=`echo n $ | cut b $numofchar`

}

chop()

{

# remove the last character in string and return it in $rval

if [ z $ ]; then

# empty string

rval=

return

fi

# wc puts some space behind the output this is why we need sed:

numofchar=`echo n $ | wc c | sed s/ //g `

if [ $numofchar = ]; then

# only one char in string

rval=

return

fi

numofcharminus=`expr $numofchar `

# now cut all but the last char:

rval=`echo n $ | cut b ${numofcharminus}`

}

while [ n $ ]; do

case $ in

h) help;shift ;; # function help is called

) shift;break;; # end of options

*) error error: no such option $ h for help;;

*) break;;

esac

done

# The main program

sum=

weight=

# one arg must be given:

[ z $ ] && help

binnum=$

binnumorig=$

while [ n $binnum ]; do

lastchar $binnum

if [ $rval = ]; then

sum=`expr $weight + $sum`

fi

# remove the last position in $binnum

chop $binnum

binnum=$rval

weight=`expr $weight * `

done

echo binary $binnumorig is decimal $sum

#

该脚本使用的算法是利用十进制和二进制数权值 ()比如二进制可以这样转换成十进制

* + * =

为了得到单个的二进制数我们是用了lastchar 函数该函数使用wc ?c计算字符个数然后使用cut命令取出末尾一个字符Chop函数的功能则是移除最后一个字符

文件循环程序

或许您是想将所有发出的邮件保存到一个文件中的人们中的一员但是在过了几个月以后这个文件可能会变得很大以至于使对该文件的访问速度变慢下面的脚本rotatefile 可以解决这个问题这个脚本可以重命名邮件保存文件(假设为outmail)为outmail而对于outmail就变成了outmail 等等等等

复制代码 代码如下:

#!/bin/sh

# vim: set sw= ts= et:

ver=

help()

{

cat < rotatefile rotate the file name

USAGE: rotatefile [h] filename

OPTIONS: h help text

EXAMPLE: rotatefile out

This will eg rename out to out out to out out to out

and create an empty outfile

The max number is

version $ver

HELP

exit

}

error()

{

echo $

exit

}

while [ n $ ]; do

case $ in

h) help;shift ;;

) break;;

*) echo error: no such option $ h for help;exit ;;

*) break;;

esac

done

# input check:

if [ z $ ] ; then

error ERROR: you must specify a file use h for help

fi

filen=$

# rename any etc file:

for n in Array ; do

if [ f $filen$n ]; then

p=`expr $n + `

echo mv $filen$n $filen$p

mv $filen$n $filen$p

fi

done

# rename the original file:

if [ f $filen ]; then

echo mv $filen $filen

mv $filen $filen

fi

echo touch $filen

touch $filen

这个脚本是如何工作的呢?在检测用户提供了一个文件名以后我们进行一个Array到的循环文件Array被命名为文件重命名为Array等等循环完成之后我们将原始文件命名为文件同时建立一个与原始文件同名的空文件

调试

最简单的调试命令当然是使用echo命令您可以使用echo在任何怀疑出错的地方打印任何变量值这也是绝大多数的shell程序员要花费%的时间来调试程序的原因Shell程序的好处在于不需要重新编译插入一个echo命令也不需要多少时间

shell也有一个真实的调试模式如果在脚本strangescript 中有错误您可以这样来进行调试

sh x strangescript

这将执行该脚本并显示所有变量的值

shell还有一个不需要执行脚本只是检查语法的模式可以这样使用

sh n your_script

这将返回所有语法错误

我们希望您现在可以开始写您自己的shell脚本希望您玩得开心

上一篇:一个不错的shell 脚本教程 入门级

下一篇:利用InstallShield获取注册表键值的脚本