第一個(gè)shell腳本
#!/bin/bash
echo "Hello world!"
1、關(guān)于#!
在腳本開頭的 sha-bang (#!) 是告訴系統(tǒng)這個(gè)文件是由特定命令解釋器解釋的一組命令。 那個(gè) #! 實(shí)際上是兩個(gè)字節(jié)的 魔數(shù), 魔數(shù)是指定文件類型的特殊記號(hào),在此是表示這是一個(gè)可執(zhí)行的shell腳本(鍵入 man magic可了解更多的信息)。緊跟著#!的是一個(gè)路徑名.這個(gè)路徑名是解釋這個(gè)腳本內(nèi)命令的命令解釋器程序的路徑:可能是一個(gè)shell,也可能是一個(gè)編程語(yǔ)言或者是一個(gè)軟件包程序。這個(gè)命令解釋器能執(zhí)行腳本內(nèi)的命令語(yǔ)句。它從腳本開頭(即從#!所在行的下一行)起執(zhí)行,但是忽略注釋行。
#!/bin/sh
#!/bin/bash
#!/usr/bin/perl
#!/usr/bin/tcl
#!/bin/sed -f
#!/usr/awk -f
上面每一個(gè)腳本頭行都是不同的命令解釋器,如果第一行是/bin/sh, 那就是默認(rèn)的Shell(Linux系統(tǒng)中bash是默認(rèn)的shell),否則的話就是其他的解釋器.如果使用#!/bin/sh(因?yàn)榇蠖嗖煌纳虡I(yè)UNIX都使用Bourne shell為默認(rèn)shell)可以使腳本能夠移植到非Linux的機(jī)器上,雖然這樣做你將不能使用Bash許多特有的屬性。但這樣做的腳本遵循 POSIX sh標(biāo)準(zhǔn).
值得注意的是,在"#!"后面提供的路徑必須是正確的,否則你運(yùn)行腳本只會(huì)收到通常像"Command not found"那樣的錯(cuò)誤信息。
如果腳本程序只是由一組普通的系統(tǒng)命令而沒(méi)有使用Shell內(nèi)置命令的話#!將被忽略。再次提醒使用#!/bin/sh將調(diào)用默認(rèn)的命令解釋器,這在Linux系統(tǒng)上是/bin/bash.
2、關(guān)于echo
echo命令是一個(gè)系統(tǒng)的內(nèi)建命令(builtin)。用于I/O操作。在這里我們利用echo命令來(lái)輸出一行字符串。
3、關(guān)于運(yùn)行方式
接著嘗試運(yùn)行這個(gè)腳本:
Hello world!
可以使用的方法有(假設(shè)文件的名字為hello.sh):
1.bash hello.sh
直接使用bash腳本運(yùn)行hello.sh 這個(gè)腳本
2.chmod +x hello.sh
./hello.sh
給這個(gè)腳本添加運(yùn)行權(quán)限之后直接調(diào)用。運(yùn)行時(shí)腳本會(huì)根據(jù)#!后面的內(nèi)容確定運(yùn)行腳本的程序。即使用/bin/bash 。
與此類似的,我們還可以將腳本放入系統(tǒng)環(huán)境變量的search path里面。比如在mac下的/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin之類的目錄下。這樣就能夠直接用hello.sh這種方式來(lái)運(yùn)行這個(gè)腳本了。