【shell】第一个shell脚本
一、第一个shell脚本
要给脚本赋可执行权限: chmod +x 脚本文件名
#!/bin/bash strA="wangyibo" strB="yibo" result=$(echo $strA | grep "${strB}") if [[ "$result" != "" ]] then echo "include" else echo "exclude" fi
- 扩展名
sh
代表 shell 扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用php
好了。 - #!/bin/bash :
#!
是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell;后面的/bin/bash
就是指明了解释器的具体位置。
二、执行shell脚本的多种方法
1) 将 Shell 脚本作为程序运行
Shell 脚本也是一种解释执行的程序,可以在终端直接调用(需要使用 chmod 命令给 Shell 脚本加上执行权限),如下所示:
[mozhiyan@localhost ~]$ cd demo #切换到 test.sh 所在的目录 [mozhiyan@localhost demo]$ chmod +x ./test.sh #给脚本添加执行权限 [mozhiyan@localhost demo]$ ./test.sh #执行脚本文件 Hello World ! #运行结果
第 2 行中,chmod +x
表示给 test.sh 增加执行权限。
第 3 行中,./
表示当前目录,整条命令的意思是执行当前目录下的 test.sh 脚本。如果不写./
,Linux 会到系统路径(由 PATH 环境变量指定)下查找 test.sh,而系统路径下显然不存在这个脚本,所以会执行失败。
通过这种方式运行脚本,脚本文件第一行的#!/bin/bash
一定要写对,好让系统查找到正确的解释器。
2) 将 Shell 脚本作为参数传递给 Bash 解释器
你也可以直接运行 Bash 解释器,将脚本文件的名字作为参数传递给 Bash,如下所示:
[mozhiyan@localhost ~]$ cd demo #切换到 test.sh 所在的目录 [mozhiyan@localhost demo]$ /bin/bash test.sh #使用Bash的绝对路径 Hello World ! #运行结果
通过这种方式运行脚本,不需要在脚本文件的第一行指定解释器信息,写了也没用。
更加简洁的写法是运行 bash 命令。bash 是一个外部命令,Shell 会在 /bin 目录中找到对应的应用程序,也即 /bin/bash,这点我们已在《Shell命令的本质到底是什么》一节中提到。
[mozhiyan@localhost ~]$ cd demo [mozhiyan@localhost demo]$ bash test.sh Hello World !
这两种写法在本质上是一样的:第一种写法给出了绝对路径,会直接运行 Bash 解释器;第二种写法通过 bash 命令找到 Bash 解释器所在的目录,然后再运行,只不过多了一个查找的过程而已。
3)在当前进程中运行 Shell 脚本
这里需要引入一个新的命令——source 命令。source 是 Shell 内置命令的一种,它会读取脚本文件中的代码,并依次执行所有语句。你也可以理解为,source 命令会强制执行脚本文件中的全部命令,而忽略脚本文件的权限。
source 命令的用法为:
source filename
也可以简写为:
. filename
两种写法的效果相同。对于第二种写法,注意点号.
和文件名中间有一个空格。
例如,使用 source 运行上节的 test.sh:
[mozhiyan@localhost ~]$ cd demo #切换到test.sh所在的目录 [mozhiyan@localhost demo]$ source ./test.sh #使用source Hello World ! [mozhiyan@localhost demo]$ source test.sh #使用source Hello World ! [mozhiyan@localhost demo]$ . ./test.sh #使用点号 Hello World ! [mozhiyan@localhost demo]$ . test.sh #使用点号 Hello World !
你看,使用 source 命令不用给脚本增加执行权限,并且写不写./
都行,是不是很方便呢?