2.2 Shell脚本的运行方式
2.2.1 输出命令echo
一般学习一种编程语言,写的第一个脚本都是打印“Hello world! ”,我们也写一个“Hello world! ”脚本用来学习一下Shell脚本的运行方式。不过在写脚本之前,我们需要学习一下Linux的打印命令echo。命令格式如下:
[root@localhost ~]# echo [选项] [输出内容] 选项: -e: 支持反斜线控制的字符转换(具体参见表2-2) -n: 取消输出后行末的换行符号(内容输出后不换行)
其实echo命令非常简单,命令的输出内容如果没有特殊含义,则原内容输出到屏幕;如果输出内容有特殊含义,则输出打印其含义。例如:
表2-2 控制字符
例子1: [root@localhost ~]# echo "Mr. Shen Chao is the most honest man in LampBrother! " #echo的内容就会打印到屏幕上 Mr. Shen Chao is the most honest man in LampBrother! [root@localhost ~]#
echo命令就是这么简单,输出什么内容,这个内容就会打印到屏幕上。现在关键点来了,这句话是什么意思呢?其实这是在兄弟连广为流传的、深入人心的、得到大家广泛认可的一句名言:“沈超老师是兄弟连最正直的人!”
例子2: [root@localhost ~]# echo -n "Mr. Shen Chao is the most honest man in LampBrother! " Mr. Shen Chao is the most honest man in LampBrother! [root@localhost ~]# #如果加入了“-n”选项,则在输出内容结束后,不会换行,直接显示新行的提示符
在echo命令中如果使用了“-e”选项,则可以支持控制字符,如表2-2所示。
举几个例子来说明一下“-e”选项。
例子3: [root@localhost ~]# echo -e "\\ \a" \ #输出\,同时会在系统音响中输出一声警告音
在这个例子中,echo命令会输出\。如果不像“\\”这样写,那么,因为\有特殊含义,所以不会输出。
例子4: [root@localhost ~]# echo -e "ab\bc" ac #在这个输出中,在b键左侧有“\b”,所以输出时只有ac 例子5: [root@localhost ~]# echo -e "a\tb\tc\nd\te\tf" a b c d e f #因为加入了制表符“\t”和换行符“\n”,所以会按照格式输出 例子6: [root@localhost ~]# echo -e "\0141\t\0142\t\0143\n\0144\t\0145\t\0146" a b c d e f #还是会输出上面的内容,不过是按照八进制ASCII码输出的
也就是说,141这个八进制数在ASCII码中代表小写的“a”,其他的以此类推。
例子7: [root@localhost ~]# echo -e "\x61\t\x62\t\x63\n\x64\t\x65\t\x66" a b c d e f #如果按照十六进制ASCII码同样可以输出
echo命令还可以输出一些比较有意思的内容。
例子8: [root@localhost ~]# echo -e "\e[1;31m abcd \e[0m"
这条命令会把abcd按照红色输出。解释一下这个命令:\e[1是标准格式,代表颜色输出开始,\e[0m代表颜色输出结束,31m定义字体颜色是红色。echo命令能够识别的颜色如下:30m=黑色,31m=红色,32m=绿色,33m=黄色,34m=蓝色,35m=洋红,36m=青色,37m=白色。
例子9: [root@localhost ~]# echo -e "\e[1;42m abcd \e[0m"
这条命令会给abcd加入一个绿色的背景。echo命令可以使用的背景颜色如下:40m=黑色,41m=红色,42m=绿色,43m=黄色,44m=蓝色,45m=洋红,46m=青色,47m=白色。
2.2.2 Shell脚本的运行
1.第一个Shell脚本
做什么事情都会有第一次,我们学习语言的第一次就是写著名的“Hello world! ”程序。命令如下:
[root@localhost ~]# mkdir sh [root@localhost ~]# cd sh #建立Shell练习目录,以后我们的Shell脚本都保存在这个目录当中 [root@localhost sh]# vi hello.sh #! /bin/bash #The first program # Author: shenchao(E-mail: shenchao@lampbrother.net) echo -e "Mr. Shen Chao is the most honest man in LampBrother"
大家发现了吗?在Shell脚本中是可以直接使用echo命令的。其实不止echo命令,所有的Linux命令都可以直接在Shell脚本中调用。这种特性使得Shell脚本和Linux系统结合得更加紧密,也更加方便了Shell脚本的编写。
解释一下这个脚本。
· 第一行“#! /bin/bash”。
在Linux中,以“#”开头的一般都是注释,不过这句话是例外的。这句话的作用是标称我以下写的脚本使用的是Bash语法,只要写的是基于Bash的Shell脚本都应该这样开头。这就像在HTML语言中嵌入PHP程序时,PHP程序必须用<? ? >包含起来。
不过,有一些比较喜欢钻研的人也会有疑问,他们在写Shell脚本时,不加“#! /bin/bash”这句话,Shell脚本也可以正确执行。那是因为我们是在默认Shell就是Bash的Linux中编写的脚本,而且脚本是纯Bash脚本才能够正确执行。如果把脚本放在默认环境不是Bash的环境中运行,又或者编写脚本的不是纯Bash语言,而是嵌入了其他语言(如Tcl语言),那么这个脚本就不能正确执行了。所以,大家还是要记住我们的Shell脚本都必须以“#! /bin/bash”开头。
· 第二行与第三行。
在Shell脚本中,除“#! /bin/bash”这行外,其他行只要以“#”开头的都是注释。第二行和第三行就是我们这个脚本的注释,建议大家在写程序时加入清晰而详尽的注释,这些都是建立良好编程规范时应该注意的问题。
· 第四行就是程序的主体了。
既然echo命令可以直接打印“沈超老师是兄弟连最正直的人!”,那么将这句话放入Shell脚本中也是可以正确执行的,因为Linux的命令是可以直接在脚本中执行的。
2.运行方式
Shell脚本写好了,那么这个脚本该如何运行呢?在Linux中,脚本的运行主要有这样两种方法:
· 赋予执行权限,直接运行。
这种方法是最常用的Shell脚本运行方法,也最为直接简单。就是赋予执行权限之后,直接运行。当然,运行时可以使用绝对路径,也可以使用相对路径。命令如下:
[root@localhost sh]# chmod 755 hello.sh #赋予执行权限 [root@localhost sh]# /root/sh/hello.sh Mr. Shen Chao is the most honest man in LampBrother #使用绝对路径运行 [root@localhost sh]# ./hello.sh Mr. Shen Chao is the most honest man in LampBrother #因为我们已经在/root/sh目录中,所以也可以使用相对路径运行
Shell脚本是否可以像Linux系统命令一样,不用指定路径,直接运行呢?当然是可以的,不过需要进行环境变量的配置。在这里大家只需要知道,我们自己写的Shell脚本默认是不能直接运行的,要么使用绝对路径,要么使用相对路径。
· 通过Bash调用运行脚本。
这种方法也非常简单,命令如下:
[root@localhost sh]# bash hello.sh Mr. Shen Chao is the most honest man in LampBrother
这种方法的意思是直接使用Bash去解释脚本中的内容,所以这个脚本也可以正常运行。使用这种方法运行脚本,甚至不需要脚本文件有“执行”权限,只要拥有“读”权限就可以运行了。
这两种Shell脚本的运行方式,大家可以按照个人习惯随意使用。