鍍金池/ 教程/ Linux/ 第一個 Shell 腳本
Shell 特殊變量:Shell $0, $#, $*, $@, $?, $$和命令行參數(shù)
Shell 文件包含
Shell 輸入輸出重定向:Shell Here Document,/dev/null
Shell 函數(shù)參數(shù)
Shell 簡介
Shell printf命令:格式化輸出語句
第一個 Shell 腳本
Shell echo 命令
Shell 運算符:Shell 算數(shù)運算符、關系運算符、布爾運算符、字符串運算符等
Shell 數(shù)組:shell 數(shù)組的定義、數(shù)組長度
Shell until 循環(huán)
Shell if else 語句
Shell 變量:Shell 變量的定義、刪除變量、只讀變量、變量類型
Shell 字符串
Shell 與編譯型語言的差異
Shell 函數(shù):Shell 函數(shù)返回值、刪除函數(shù)、在終端調用函數(shù)
Shell 替換
Shell case esac 語句
Shell for 循環(huán)
什么時候使用 Shell
Shell 注釋
幾種常見的 Shell
Shell while 循環(huán)
Shell break 和 continue 命令

第一個 Shell 腳本

打開文本編輯器,新建一個文件,擴展名為 sh(sh 代表 shell),擴展名并不影響腳本執(zhí)行,見名知意就好,如果你用 php 寫 shell 腳本,擴展名就用 php 好了。

輸入一些代碼:

#!/bin/bash
echo "Hello World !"

“#!” 是一個約定的標記,它告訴系統(tǒng)這個腳本需要什么解釋器來執(zhí)行,即使用哪一種 Shell。echo命令用于向窗口輸出文本。

運行 Shell 腳本有兩種方法。

作為可執(zhí)行程序

將上面的代碼保存為 test.sh,并 cd 到相應目錄:

chmod +x ./test.sh  #使腳本具有執(zhí)行權限
./test.sh  #執(zhí)行腳本

注意,一定要寫成 ./test.sh,而不是 test.sh。運行其它二進制的程序也一樣,直接寫test.sh,linux 系統(tǒng)會去 PATH 里尋找有沒有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的當前目錄通常不在 PATH 里,所以寫成 test.sh 是會找不到命令的,要用 ./test.sh 告訴系統(tǒng)說,就在當前目錄找。

通過這種方式運行 bash 腳本,第一行一定要寫對,好讓系統(tǒng)查找到正確的解釋器。

這里的"系統(tǒng)",其實就是 shell 這個應用程序(想象一下 Windows Explorer),但我故意寫成系統(tǒng),是方便理解,既然這個系統(tǒng)就是指 shell,那么一個使用 /bin/sh 作為解釋器的腳本是不是可以省去第一行呢?是的。

作為解釋器參數(shù)

這種運行方式是,直接運行解釋器,其參數(shù)就是 shell 腳本的文件名,如:

/bin/sh test.sh
/bin/php test.php

這種方式運行的腳本,不需要在第一行指定解釋器信息,寫了也沒用。

再看一個例子。下面的腳本使用 read 命令從 stdin 獲取輸入并賦值給 PERSON 變量,最后在 stdout 上輸出:

#!/bin/bash

# Author : mozhiyan
# Copyright (c) http://see.xidian.edu.cn/cpp/linux/
# Script follows here:

echo "What is your name?"
read PERSON
echo "Hello, $PERSON"

運行腳本:

chmod +x ./test.sh
$./test.sh
What is your name?
mozhiyan
Hello, mozhiyan
$