1、shell脚本实例shell脚本实例-学习的捷径就是练习 写在前面: 1.在linux里面是不在乎后缀名的,但是建议写上后缀名,如test.sh,这样一眼便看出这是shell程序。 2.如果不能运行,一般要执行chmod +x filename 使文件可执行 3.执行格式一般为./test.sh,为了安全起见。 4.写shell脚本时最好要建立良好的习惯。 在每个 script 的档头处记录好(练习的时候免了吧) script 的功能; script 的版本资讯; script 的作者与联络方式; script 的版权宣告方式; script 的 History (历史纪录); script
2、内较特殊的指令,使用绝对路径的方式来下达; script 运作时需要的环境变数预先宣告与设定。来自: 鸟哥的私房菜 注:鸟哥的shell用的是bash,不过建议写成 #!/bin/sh这样就可以使用系统默认版本的shell,而不一定就是用bash。 在获取命令的运行结果中,鸟哥用的是(不是单引号),建议用$(),更好一些。# 请建立一支 script ,当你执行该 script 的时候,该 script 可以显示 1. 你目前的身份 (用 whoami ) 2. 你目前所在的目录 (用 pwd) view plaincopy to clipboardprint?1.#!/bin/bash 2.
3、echo-eYournameis=$(whoami)3.echo-eThecurrentdirectoryis=pwd# 请自行建立一支程式,该程式可以用来计算您还有几天可以过生日啊? view plaincopy to clipboardprint?1.#!/bin/bash 2.read-pPleasinputyourbirthday(MMDD,ex0709):bir3.now=date+%m%d4.if$bir=$now;then5.echoHappyBirthdaytoyou!6.elif$bir-gt$now;then7.year=date+%Y8.total_d=$($(date-
4、date=$year$bir+%s-date+%s)/60/60/24)9.echoYourbirthdaywillbe$total_dlater10.else11.year=$(date+%Y+1)12.total_d=$($(date-date=$year$bir+%s-date+%s)/60/60/24)13.echoYourbirthdaywillbe$total_dlater14.fi# 让使用者输入一个数字,程式可以由 1+2+3. 一直累加到使用者输入的数字为止。 view plaincopy to clipboardprint?1.#!/bin/bash 2.read-pPle
5、aseinputanintegernumber:number3.i=04.s=05.while$i!=$number6.do7.i=$($i+1)8.s=$($s+$i)9.done10.echotheresultof1+2+3+.$numberis=$s# 撰写一支程式,他的作用是: 1.) 先查看一下 /root/test/logical 这个名称是否存在; 2.) 若不存在,则建立一个档案,使用 touch 来建立,建立完成后离开; 3.) 如果存在的话,判断该名称是否为档案,若为档案则将之删除后建立一个档案,档名为 logical ,之后离开; 4.) 如果存在的话,而且该名称为目录,
6、则移除此目录! view plaincopy to clipboardprint?1.#!/bin/bash 2.if!-elogical;then3.touchlogical4.echoJustmakeafilelogical5.exit16.elif-elogical&-flogical;then7.rmlogical8.mkdirlogical9.echoremovefile=logical10.echoandmakedirectorylogical11.exit112.elif-elogical&-dlogical;then13.rm-rflogical14.echoremovedir
7、ectory=logical15.exit116.else17.echoDoesherehaveanything?18.fi# 我们知道 /etc/passwd 里面以 : 来分隔,第一栏为帐号名称。请写一苹程式,可以将 /etc/passwd 的第一栏取出,而且每一栏都以一行字串The 1 account is root 来显示,那个 1 表示行数。view plaincopy to clipboardprint?1.#!/bin/bash 2.accounts=cat/etc/passwd|cut-d:-f13.foraccountin$accounts4.do5.declare-ii=$
8、i+16.echoThe$iaccountis/$account/7.done来自: 1. 写一个脚本,利用循环计算10的阶乘 view plaincopy to clipboardprint?1.#!/bin/sh 2.3.factorial=14.5.forainseq1106.do7.factorial=expr$factorial/*$a8.done9.10.echo10!=$factorial注:上面有一行,for a in seq 1 10,其中seq 1 10 , 即列出现1到10之间所有的数字,这一行也可改为:for a in 1 2 3 4 5 6 7 8 9 10 2. 写
9、一个脚本,执行后,打印一行提示“Please input a number:,要求用户输入数值,然 后打印出该数值,然后再次要求用户输入数值。直到用户输入 end停止。 view plaincopy to clipboardprint?1.#!/bin/sh 2.3.unsetvar4.5.while$var!=end6.do7.echo-npleaseinputanumber:8.readvar9.if$var=end10.then11.break12.fi13.echovaris$var14.done 3. 写一个脚本,利用循环和continue关键字,计算100以内能被3整除的数之和 v
10、iew plaincopy to clipboardprint?1.#!/bin/sh 2.sum=03.forainseq11004.do5.ifexpr$a%3-ne06.then7.continue8.fi9.echo$a10.sum=expr$sum+$a11.done12.echosum=$sum 4一个函数,利用shift计算所有参数乘积,假设参数均为整数( 特殊变量$# 表示包含参数的个数)view plaincopy to clipboardprint?1.#!/bin/sh 2.3.result=14.while$#-gt05.do6.result=expr$result/*
11、$17.shift8.done9.echo$resul5写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。 view plaincopy to clipboardprint?1.#!/bin/sh 2.3.case$1#*.tar.in4.bz2)5.tarjxvf$16.;7.gz)8.tarzxvf$19.;10.*)11.echowrongfiletype12.esac 6写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,比如文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,包的信息等。
12、然后询问是否继续查询,是则循环刚才的过 程,否则退出。 view plaincopy to clipboardprint?1.#!/bin/sh 2.RPM=/bin/rpm3.option=-q4.5.whiletrue6.do7.echowhattoquery?8.selectvarinAllfilepackagename9.do10.case$varin11.All)12.option=$optiona13.break14.;15.file)16.echo-npleaseinputfilename:17.option=$optionf18.readargument19.break20.;
13、21.package/name)22.echo-npleaseinputpackagename:23.readargument24.break25.;26.*)27.echopleasechoosebetween1-328.;29.esac30.done31.32.echowhatdoyouwanttoknow?33.selectvarinlocationinfopackagename34.do35.case$varin36.location)37.option=$optionl38.break39.;40.info)41.option=$optioni42.break43.;44.package/name)45.break46.;47.*)48.echopleasechoosebetween1-349.;50.esac51.done52.53.$RPM$option$argument54.55.echocontinue?yes/no56.readanswer57.58.ifanswer=no59.then60.break61.fi62.done
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2