编写:
shell 脚本其实就是纯文字文件 (ASCII) ,我们可以编辑这个档案, 然后让这个档案来帮我们一次执行多个指令,或者是利用一些运算与逻辑判断来帮我们达成某些功能。在 shell 脚本的撰写同样需要用到这些注意事项的:
1. 指令与参数间的多个空白会被忽略掉
2. 空白行与制表符也将被忽略掉
3. 如果读取到一个 Enter 符号 ( CR ),就尝试开始执行该行命令;
4. 至于如果一行的内容太多,则可以使用 \ 来延伸至下一行;
5. 任何加在 # 后面的字,将全部被视为批注文字而被忽略!
执行:
如此一来,我们在 script 内所撰写的程序,就会被从左到右从上到下一行一行的执行。好了,那么这个程序假设文件名是 shell.sh 好了,如何执行这个脚本?很简单,可以有底下几个方法:
1.将 shell.sh 加上可读与执行 (rx) 的权限,然后就能够以 ./shell.sh 来执行了;
2.直接以 sh shell.sh 的方式来直接执行即可。
反正重点就是要让那个 shell.sh 内的指令可以被执行的意思啦!那我为何需要使用 ./shell.sh 来下达指令? 还记得我们在 bash 里面一直强调的,指令是否能够被执行与 PATH 这个环境变量有关, 所以,要执行当前目录下的文件就需要加上 ./ 这个目录啦!另外,其实您也可以将 shell.sh 放在您家目录下的 ~/bin 这个目录中,然后利用 PATH="$PATH":~/bin 的设定, 就能够直接执行您的脚本,执行命令: shell.sh
为何 sh shell.sh 也可以执行呢?这是因为 /bin/sh 其实就是 /bin/bash , 使用 sh shell.sh 亦即告诉系统,我想要直接以 bash 的功能来执行 shell.sh 这个档案内的相关指令的意思。 而我们也可以利用 sh 的参数,如 -n 及 -x 来检查与追踪 shell.sh 的语法是否正确呢!
脚本实例:
[root@linux ~]# mkdir scripts; cd scripts
[root@linux scripts]# vi sh01.sh
#!/bin/bash
# Program:
# This program is used to show "Hello World !" in screen.
# History:
# 2005/08/23 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World ! \a \n"
exit 0
将所有的撰写的 script 放置到您家目录的 ~/scripts 这个目录内, 比较好管理啦!上面的写法当中,我主要将整个程序的撰写分成数段,大致是这样:
1. 第一行 #!/bin/bash 在宣告这个 script 使用的 shell 名称: 因为我们使用的是 bash ,所以,必须要以『 #!/bin/bash 』来宣告这个档案内的语法使用 bash 的语法!那么当这个程序被执行时,他就能够加载 bash 的相关环境设定档, 并且执行 bash 来使我们底下的指令能够执行!这很重要的!(在很多状况中,如果没有设定好这一行, 那么该程序很可能会无法执行,因为系统可能无法判断该程序需要使用什么 shell 来执行啊!)
2. 程序内容的宣告: 整个 script 当中,除了第一行的 #! 是用来宣告 shell 的之外,其它的 # 都是『批注』用途! 所以上面的程序当中,第二行以下就是用来说明整个程序的状态。一般来说, 建议您一定要养成说明该 script 的:1. 内容与功能; 2. 版本信息; 3. 作者与联络方式; 4. 建檔日期;5. 历史纪录 等等。这将有助于未来程序的改写与 debug 呢!
3. 主要环境变量的宣告: 建议务必要将一些重要的环境变量设定好,如此一来,则可让我们这支程序在进行时,可以直接下达指令, 而不必写绝对路径呢!比较好啦,且环境变量只在当前shell生效,不影响系统shell
4. 主要程序部分 就将主要的程序写好即可!在这个例子当中,就是 echo 那一行啦!
5. 执行成果告知 是否记得我们在 bash 里面要讨论一个指令的执行成功与否,可以使用 $? 这个变量来观察~ 那么我们也可以利用 exit 这个指令来让程序中断,并且回传一个数值给系统。 在我们这个例子当中,我使用 exit 0 ,这代表离开 script ,并且回传一个 0 给系统, 所以我执行完这个 script后,若接着下达 echo $? 则可得到 0 的值喔! 更聪明的读者应该也知道了,呵呵!利用这个 exit n 的功能,我们还可以自订错误讯息, 让这支程序变得更加的 smart 呢!
接下来执行看看结果是怎样吧?
[root@linux scripts]# sh sh01.sh
Hello World !
shell 脚本其实就是纯文字文件 (ASCII) ,我们可以编辑这个档案, 然后让这个档案来帮我们一次执行多个指令,或者是利用一些运算与逻辑判断来帮我们达成某些功能。在 shell 脚本的撰写同样需要用到这些注意事项的:
1. 指令与参数间的多个空白会被忽略掉
2. 空白行与制表符也将被忽略掉
3. 如果读取到一个 Enter 符号 ( CR ),就尝试开始执行该行命令;
4. 至于如果一行的内容太多,则可以使用 \ 来延伸至下一行;
5. 任何加在 # 后面的字,将全部被视为批注文字而被忽略!
执行:
如此一来,我们在 script 内所撰写的程序,就会被从左到右从上到下一行一行的执行。好了,那么这个程序假设文件名是 shell.sh 好了,如何执行这个脚本?很简单,可以有底下几个方法:
1.将 shell.sh 加上可读与执行 (rx) 的权限,然后就能够以 ./shell.sh 来执行了;
2.直接以 sh shell.sh 的方式来直接执行即可。
反正重点就是要让那个 shell.sh 内的指令可以被执行的意思啦!那我为何需要使用 ./shell.sh 来下达指令? 还记得我们在 bash 里面一直强调的,指令是否能够被执行与 PATH 这个环境变量有关, 所以,要执行当前目录下的文件就需要加上 ./ 这个目录啦!另外,其实您也可以将 shell.sh 放在您家目录下的 ~/bin 这个目录中,然后利用 PATH="$PATH":~/bin 的设定, 就能够直接执行您的脚本,执行命令: shell.sh
为何 sh shell.sh 也可以执行呢?这是因为 /bin/sh 其实就是 /bin/bash , 使用 sh shell.sh 亦即告诉系统,我想要直接以 bash 的功能来执行 shell.sh 这个档案内的相关指令的意思。 而我们也可以利用 sh 的参数,如 -n 及 -x 来检查与追踪 shell.sh 的语法是否正确呢!
脚本实例:
[root@linux ~]# mkdir scripts; cd scripts
[root@linux scripts]# vi sh01.sh
#!/bin/bash
# Program:
# This program is used to show "Hello World !" in screen.
# History:
# 2005/08/23 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World ! \a \n"
exit 0
将所有的撰写的 script 放置到您家目录的 ~/scripts 这个目录内, 比较好管理啦!上面的写法当中,我主要将整个程序的撰写分成数段,大致是这样:
1. 第一行 #!/bin/bash 在宣告这个 script 使用的 shell 名称: 因为我们使用的是 bash ,所以,必须要以『 #!/bin/bash 』来宣告这个档案内的语法使用 bash 的语法!那么当这个程序被执行时,他就能够加载 bash 的相关环境设定档, 并且执行 bash 来使我们底下的指令能够执行!这很重要的!(在很多状况中,如果没有设定好这一行, 那么该程序很可能会无法执行,因为系统可能无法判断该程序需要使用什么 shell 来执行啊!)
2. 程序内容的宣告: 整个 script 当中,除了第一行的 #! 是用来宣告 shell 的之外,其它的 # 都是『批注』用途! 所以上面的程序当中,第二行以下就是用来说明整个程序的状态。一般来说, 建议您一定要养成说明该 script 的:1. 内容与功能; 2. 版本信息; 3. 作者与联络方式; 4. 建檔日期;5. 历史纪录 等等。这将有助于未来程序的改写与 debug 呢!
3. 主要环境变量的宣告: 建议务必要将一些重要的环境变量设定好,如此一来,则可让我们这支程序在进行时,可以直接下达指令, 而不必写绝对路径呢!比较好啦,且环境变量只在当前shell生效,不影响系统shell
4. 主要程序部分 就将主要的程序写好即可!在这个例子当中,就是 echo 那一行啦!
5. 执行成果告知 是否记得我们在 bash 里面要讨论一个指令的执行成功与否,可以使用 $? 这个变量来观察~ 那么我们也可以利用 exit 这个指令来让程序中断,并且回传一个数值给系统。 在我们这个例子当中,我使用 exit 0 ,这代表离开 script ,并且回传一个 0 给系统, 所以我执行完这个 script后,若接着下达 echo $? 则可得到 0 的值喔! 更聪明的读者应该也知道了,呵呵!利用这个 exit n 的功能,我们还可以自订错误讯息, 让这支程序变得更加的 smart 呢!
接下来执行看看结果是怎样吧?
[root@linux scripts]# sh sh01.sh
Hello World !
您会看到屏幕是这样,而且应该还会听到『咚』的一声,为什么呢?还记得前一章提到的 printf 吧?用 echo 接着那些特殊的按键也可以发生同样的事情~ 不过, echo 必须要加上 -e 的参数才行! 另外,你也可以利用:『chmod a+x sh01.sh; ./sh01.sh』来执行这个 script 的呢!
以上摘自鸟哥经典,有少量修改