2013年3月14日 星期四 晴 12—零下2度



一、给执行权限的脚本



1、编辑简单脚本



[root@desktop7 ~]# vim hello.sh


#!/bin/bash


#zhe shi wo men de di yi ge jiao ben


echo 'Hello,你好。bash shell!'



2、赋予执行权限



[root@desktop7 ~]# chmod a+x hello.sh    #其中a+x等同于+x



3、执行脚本



[root@desktop7 ~]# ./hello.sh


Hello,你好。bash shell!



因为文件建在根目录下,所以可以直接执行



其他文件



#cd 脚本目录;./filename.sh                #分号(;)隔开,执行多条命令



或者是



#/root/filename.sh                       #绝对路径      



二、 无执行权限的脚本



1、bash+脚本文件名(filename)



[root@desktop7 ~]# ./hello.sh             #此时脚本文件中#!/bin/bash的说明已经无意义


bash: ./hello.sh: Permission denied


[root@desktop7 ~]# bash hello.sh


Hello,你好。bash shell!


[root@desktop7 ~]#



2、sh+脚本文件名(filename)



[root@desktop7 ~]# sh hello.sh


Hello,你好。bash shell!


[root@desktop7 ~]#



3、. filename(点+空格+文件名)



[root@desktop7 ~]# . hello.sh            #点(.)为执行程序


Hello,你好。bash shell!


[root@desktop7 ~]#



4、source filename



[root@desktop7 ~]# source hello.sh


Hello,你好。bash shell!


[root@desktop7 ~]#



三、脚本排错



1、编辑脚本文件,加入(-x)



[root@desktop7 ~]# vim hello.sh


#!/bin/bash -x


#zhe shi wo men de di yi ge jiao ben


echo 'Hello,你好。bash shell!'



赋予执行权限



[root@desktop7 ~]# chmod a+x hello.sh



显示有哪些操作显示哪些结果



[root@desktop7 ~]# ./hello.sh


+ echo 'Hello,你好。bash shell!'


Hello,你好。bash shell!



2、较详细显示效果



[root@desktop7 ~]# vim jiafa.sh


#!/bin/bash -x


a=3


b=5


echo $a $b


~          


[root@desktop7 ~]# chmod a+x jiafa.sh


[root@desktop7 ~]# ./jiafa.sh


+ a=3


+ b=5


+ echo 3 5


3 5


[root@desktop7 ~]#



没有(-x)结果



[root@desktop7 ~]# vim jiafa.sh


#!/bin/bash


a=3


b=5


echo $a $b



[root@desktop7 ~]# ./jiafa.sh


3 5


[root@desktop7 ~]#



四、多条命令的选择



1、多选一执行



(1)编辑文件



[root@desktop7 ~]# vim wrong.sh


#!/bin/bash


cd /root/Dektop/door ||mkdir /root/desk ||touch zhuozi



(2)赋予权限



[root@desktop7 ~]# chmod a+x wrong.sh



(3)执行


 


[root@desktop7 ~]# ./wrong.txt


./wrong.sh: line 2: cd: /root/Dektop/door: No such file or directory



(4)验证



[root@desktop7 ~]# ls


anaconda-ks.cfg  Desktop   html.txt     install.log.syslog  jiafa.sh


desk(#新创建的目录)hello.sh  install.log  install-vserver     wrong.sh


[root@desktop7 ~]#



||表示前面的命令执行不成功,后面的命令才会执行。已经有执行成功的命令,则后面的命令不会执行



2、多条命令全部执行



(1)编辑文件



[root@desktop7 ~]# vim wrong2.sh


#!/bin/bash


cd /root/Dektop/door;mkdir /root/desk2/;touch yizi



(2)赋予权限



[root@desktop7 ~]# chmod a+x wrong2.sh


 


(3)执行脚本


                                                


[root@desktop7 ~]# ./wrong2.sh


./wrong2.sh: line 2: cd: /root/Dektop/door: No such file or directory


[root@desktop7 ~]#



(4)验证



[root@desktop7 ~]# ls


anaconda-ks.cfg  Desktop   install.log         jiafa.sh    yizi(#新建文件)


desk             hello.sh  install.log.syslog  wrong2.sh  zhuozi


desk2(#新建目录)  html.txt  install-vserver     wrong.sh


[root@desktop7 ~]#


后面两条命令都执行,即便第一条不成功



采用分号(;)隔开多条命令时,不论前面的命令是否成功,不影响后面命令的执行



3、成功才继续



(1)编辑文本



[root@desktop7 ~]# vim wrong3.sh


#!/bin/bash


mkdir /root/desk10/&&touch banana&&mkdir /root/Desktop/lvyou/&&cd /root/Desktop/lvyou



(2)赋予权限



[root@desktop7 ~]# chmod a+x wrong3.sh


[root@desktop7 ~]#



(3)执行脚本



[root@desktop7 ~]# source wrong3.sh              #使用source成功显示执行结果



(4)验证



[root@desktop7 lvyou]# pwd


/root/Desktop/lvyou


[root@desktop7 lvyou]#



[root@desktop7 lvyou]# cd



[root@desktop7 ~]# ls


anaconda-ks.cfg  desk4        install.log.syslog  pingguo     wrong3.sh


banana(#新增)    Desktop      install-vserver     wrong3.txt


desk10(#新增)    install.log  mbox                



将后两条命令颠倒



编辑文件



[root@desktop7 ~]# vim wrong4.sh


#!/bin/bash


mkdir /root/desk8 && touch pear &&cd /root/Desktop/tachun && mkdir /root/Desktop/tachun


     


赋予权限



[root@desktop8 ~]# chmod a+x wrong4.sh



用source执行脚本


 


[root@desktop8 ~]# source wrong4.sh


bash: cd: /root/Desktop/chunyou: No such file or directory



验证其他命令执行情况



[root@desktop8 ~]# ls


anaconda-ks.cfg  Desktop      install.log.syslog  orange    yuan.sh


desk5            install.log  install-vserver     wrong4.sh



前面的命令成功执行,第三条命令不成功



使用符号&&时,只有在前面的命令成功执行后,后面的命令才会继续执行