您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“怎么用命令執(zhí)行Shell腳本”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“怎么用命令執(zhí)行Shell腳本”吧!
假設(shè)這個 shell 腳本的名稱為 tinyshell.sh。
在 Linux 下進(jìn)行項目開發(fā),經(jīng)常會用到一些調(diào)試開發(fā)命令。
這些命令可能比較長,需要輸入多個字符。
例如,Android 系統(tǒng)抓取全部 log 并包含 log 時間的命令是 adb logcat -b all -v threadtime。
抓取 log 是調(diào)試開發(fā)非常常見的操作,這個命令又很長,輸入起來不方便。
為了簡化輸入,可以配置一些命令簡寫來對應(yīng)比較長命令。
例如,配置 ala 對應(yīng) adb logcat -b all -v threadtime。
把 als 作為參數(shù)傳遞給當(dāng)前的 tinyshell.sh 腳本,會執(zhí)行該命令簡寫對應(yīng)的命令。
這樣只需要輸入比較少的字符,就能執(zhí)行比較長的命令。
實際上,這個功能類似于 bash 的 alias 別名,只是將這些別名統(tǒng)一放到該腳本來處理。
可以把 tinyshell.sh 腳本作為學(xué)習(xí) shell 腳本的參考例子,獨立維護(hù)更新,根據(jù)需要擴充更多的功能。
如之前說明,可以用 ala 表示 adb logcat -b all -v threadtime 這個命令。
這個 ala 稱之為 “命令簡寫”。
命令簡寫使用一些簡單的字符來表示特定的命令。
可以在命令簡寫后面動態(tài)提供命令的參數(shù)。
為了方便動態(tài)添加、刪除、查詢命令簡寫,可以把這些命令簡寫保存在一個配置文件里面。
在執(zhí)行 tinyshell.sh 腳本時,會讀取配置文件內(nèi)容,獲取到各個配置項的值。
配置項的基本格式是:命令簡寫|命令內(nèi)容
每個配置項占據(jù)一行。每一行默認(rèn)以第一個豎線 ‘|' 隔開命令簡寫和命令內(nèi)容。
一個參考的配置文件內(nèi)容如下所示:
ll|ls --color=auto -l ala|adb logcat -b all -v threadtime gl|git log gp|git pull --stat --no-tags $(git remote) $(git rev-parse --abbrev-ref HEAD)
這里配置的命令內(nèi)容可以是系統(tǒng)支持的任意命令。
解析配置文件時,需要用到之前文章介紹的 parsecfg.sh 腳本。
要獲取 parsecfg.sh 腳本的代碼,可以查看之前的文章。
后面會提供具體測試的例子,可供參考。
列出 tinyshell.sh 腳本的具體代碼如下所示。
在這個代碼中,對大部分關(guān)鍵代碼都提供了詳細(xì)的注釋,方便閱讀。
這篇文章的后面也會對一些關(guān)鍵點進(jìn)行說明,有助理解。
#!/bin/bash -i # 使用 bash 的 -i 選項,讓該腳本在交互模式下運行. # 實現(xiàn)一個小型的 shell. 支持內(nèi)置命令、命令簡寫. 如果提供這兩種命令之外 # 的其他命令,會嘗試在 bash 中直接執(zhí)行所給命令,可以執(zhí)行系統(tǒng)支持的命令. # 命令簡寫指的是一些簡單的字符,會對應(yīng)一串實際要執(zhí)行的命令.只要輸入命令 # 簡寫就可以執(zhí)行對應(yīng)的命令,減少需要輸入的字符.命令簡寫在配置文件中配置. # 下面變量指定默認(rèn)解析的配置文件名.該文件配置了命令簡寫、以及對應(yīng)的命令. # 這個 tinyshellcmds.txt 文件需要預(yù)先配置好,放到指定路徑的目錄底下. # 直接修改這個配置文件,就可以動態(tài)添加或刪除命令簡寫.不需要修改腳本代碼. SHORT_COMMANDS="${HOME}/.liconfig/tinyshellcmds.txt" # PARSECFG_filepath 是 parsecfg.sh 腳本里面的變量. 如果這個變量為空, # 說明還沒有打開過配置文件,進(jìn)入下面的分支打開默認(rèn)的配置文件. if [ -z "$PARSECFG_filepath" ]; then # 導(dǎo)入解析配置文件的腳本,以便調(diào)用該腳本的函數(shù)來解析配置文件. source parsecfg.sh # 調(diào)用 parsecfg.sh 里面的 open_config_file() 函數(shù)解析配置文件. # 如果配置文件不存在,會返回 1,經(jīng)過'!'操作符取反為 0,會退出執(zhí)行. if ! open_config_file "$SHORT_COMMANDS"; then exit 2 fi fi # 下面變量指定 tiny shell 的提示字符串. PROMPT="TinySh>>> " # 下面使用 basename 命令來提取出腳本的文件名,去掉目錄路徑部分. show_help() { printf "USAGE $(basename $0) [option] [shortcmd [argument1 ... [argumentn]]] OPTIONS option: 可選的選項參數(shù). 支持的選項參數(shù)描述如下: -h: 打印這個幫助信息. -l: 打印配置文件本身的內(nèi)容,會列出配置的命令簡寫和對應(yīng)的命令. -v: 以鍵值對的方式列出命令簡寫和對應(yīng)的命令. -i: 在配置文件中查找指定內(nèi)容.后面跟著一個參數(shù),指定要查找的內(nèi)容. -e: 使用 vim 打開腳本的配置文件,以供編輯. -a: 新增或修改一個命令簡寫和對應(yīng)的命令.后面跟著一個參數(shù),用 單引號括起來,以指定命令簡寫和命令. 格式為: 命令簡寫|命令. 例如 -a 'p|git pull',如果p簡寫不存在則新增它,否則修改它. -d: 從腳本配置文件中刪除一個命令簡寫和對應(yīng)的命令.后面跟著一個 參數(shù),指定要刪除的命令簡寫.例如 -d s,會刪除命令簡寫為 s 的行. shortcmd: 可選選項. 指定要直接執(zhí)行的命令簡寫. 提供命令簡寫參數(shù),不會進(jìn)入 tiny shell. argument1 ... argumentn: 可選選項. 指定該命令簡寫的參數(shù). 命令簡寫對應(yīng)一個命令,支持動態(tài)提供參數(shù). NOTE 如果沒有提供任何參數(shù),默認(rèn)會進(jìn)入 tiny shell 解釋器. 在 tiny shell 中 接收用戶輸入并執(zhí)行對應(yīng)的命令.直到讀取到EOF、或者執(zhí)行quit命令才會退出. " } # tiny shell 的內(nèi)置命令數(shù)組. 這是一個關(guān)聯(lián)數(shù)組. 數(shù)組元素的 # 鍵名是內(nèi)置命令名. 數(shù)組元素的鍵值是響應(yīng)內(nèi)置命令的函數(shù)名. declare -A BUILTIN_COMMAND=( \ [help]="builtin_command_help" \ [quit]="builtin_command_quit" \ [debug]="builtin_command_debug" \ ) # bash 的 help 命令默認(rèn)會打印內(nèi)置命令列表. 這里仿照這個行為, # 讓 help 內(nèi)置命令打印內(nèi)置命令列表、以及配置文件包含的命令簡寫. builtin_command_help() { printf "下面列出 Tiny Shell 支持的內(nèi)置命令列表和配置的命令簡寫列表. 輸入內(nèi)置命令名或命令簡寫,會執(zhí)行對應(yīng)的命令. 也可以輸入系統(tǒng)自身支持的命令,會在 bash 中執(zhí)行所給命令. 內(nèi)置命令列表: debug: 所給第一個參數(shù)指定打開、或關(guān)閉調(diào)試功能. 其參數(shù)說明如下: on: 打開調(diào)試功能,會執(zhí)行 bash 的 set -x 命令 off: 關(guān)閉調(diào)試功能,會執(zhí)行 bash 的 set +x 命令 help: 打印當(dāng)前幫助信息. quit: 退出當(dāng)前 Tiny Shell. 命令簡寫列表: " # 調(diào)用 parsecfg.sh 的 handle_config_option -v 打印命令簡寫列表 handle_config_option -v } # quit 內(nèi)置命令. 執(zhí)行該命令會退出整個腳本,從而退出當(dāng)前 tiny shell. builtin_command_quit() { exit } # debug 內(nèi)置命令. 所給第一個參數(shù)指定打開、或關(guān)閉調(diào)試功能. # debug on: 打開調(diào)試功能,會執(zhí)行 bash 的 set -x 命令 # debug off: 關(guān)閉調(diào)試功能,會執(zhí)行 bash 的 set +x 命令 builtin_command_debug() { if [ $# -ne 1 ]; then echo "Usage: debug on/off" return 1 fi if [ "$1" == "on" ]; then set -x elif [ "$1" == "off" ]; then set +x else echo -e "Unknown argument: $1\nUsage: debug on/off" fi return } # 處理 tiny shell 內(nèi)置命令.對于內(nèi)置命令,會調(diào)用對應(yīng)函數(shù)進(jìn)行處理. # 該函數(shù)的返回值表示所給命令名是否內(nèi)置命令. # 返回 0, 表示是內(nèi)置命令. 返回 1, 表示不是內(nèi)置命令. execute_builtin_command() { # 在傳遞過來的參數(shù)中,第一個參數(shù)是命令名,剩余的參數(shù)是該命令的參數(shù). local cmdname="$1" # 從 BUILTIN_COMMAND 數(shù)組中獲取所給命令對應(yīng)的處理函數(shù). # 如果所給命令不是內(nèi)置命令,會獲取為空. local cmdfunc="${BUILTIN_COMMAND["${cmdname}"]}" if [ -n "${cmdfunc}" ]; then # 將位置參數(shù)左移一位,移除命令名,剩下的就是該命令的參數(shù). shift 1 ${cmdfunc} "$@" # 無論執(zhí)行內(nèi)置命令是否報錯,都會返回 0,表示該命令是內(nèi)置命令. return 0 else return 1 fi } # 處理 tiny shell 的命令簡寫.在所解析的配置文件中包含了支持的命令簡寫. # 該函數(shù)的返回值表示所給命令名是否命令簡寫. # 返回 0, 表示是命令簡寫. 返回 1, 表示不是命令簡寫. execute_short_command() { # 判斷所給的參數(shù)是否對應(yīng)配置文件中的某個鍵名.如果是,將取出鍵值. local key="$1" # 從配置文件中獲取所給命令簡寫對應(yīng)要執(zhí)行的命令 local cmd_value=$(get_value_by_key "${key}") if test -n "${cmd_value}"; then # 將位置參數(shù)左移一位,移除命令簡寫,剩下的就是命令的參數(shù). shift 1 # 下面要用 "$*" 來把所有參數(shù)組合成一個參數(shù),再跟命令內(nèi)容一起傳入 # bach -c,確保 bash -c 把命令內(nèi)容和所有參數(shù)都當(dāng)成要執(zhí)行的命令 bash -c "$cmd_value $*" # 打印命令簡寫,以及該簡寫對應(yīng)的命令,以便查看具體執(zhí)行了什么命令. # 先執(zhí)行命令,再打印命令內(nèi)容. 由于有些命令的輸出很多,先打印命令 # 內(nèi)容的話,需要拉動終端滾動條,才能找到打印的命令內(nèi)容,不便于查看. echo -e "\e[33m命令簡寫: ${key}. 命令: ${cmd_value} $*\e[0m" return 0 else # 如果獲取到的鍵值為空,表示所給鍵名不是有效的命令簡寫,返回 1 return 1 fi } # 處理所給的內(nèi)容.這個內(nèi)容可能是內(nèi)置命令,命令簡寫,或者命令本身. handle_input_command() { # 所給參數(shù)是要執(zhí)行的命令名、以及命令參數(shù). 如果命令名是配置的 # 命令簡寫,會把該命令簡寫替換成對應(yīng)的命令,再進(jìn)行對應(yīng)的命令. local inputcmd="$@" # if 語句可以直接判斷命令返回值是否為 0,并不是只能搭配 [ 命令使用. # 注意: 由于有的 tiny shell 內(nèi)置命令接收參數(shù),下面的 ${cmd_line} # 不能用雙引號括起來,否則多個參數(shù)會被當(dāng)成一個參數(shù). if execute_builtin_command ${inputcmd}; then # 先調(diào)用 execute_builtin_command 函數(shù)處理內(nèi)置命令.如果所給 # 命令是內(nèi)置命令,則調(diào)用對應(yīng)的函數(shù)進(jìn)行處理,且不再往下執(zhí)行. return 0 elif execute_short_command ${inputcmd}; then # 調(diào)用 execute_short_command 函數(shù)處理命令簡寫. return 0 else # 對于 tiny shell 不能執(zhí)行的命令,嘗試用 bash -c 在 bash 中執(zhí)行. bash -c "${inputcmd}" # 當(dāng) return 命令不加具體狀態(tài)碼時,它會返回上一條執(zhí)行命令的狀態(tài)碼. return fi } # SIGINT 信號的處理函數(shù).目前不做特殊處理,只是想在輸入CTRL-C后,不會終止 # 當(dāng)前 tiny shell. 輸入 CTRL-C 還是可以終止 tiny shell 啟動的子 shell. sigint_handler() { # 當(dāng)輸入 CTRL-C 后,終端只顯示"^C",但是不會自動換行,需要輸入回車才會 # 換行,并重新輸出提示字符串. 而在交互式Bash中,輸入"^C"后,就會自動回 # 車,并輸出提示字符串.這里模仿這個行為,先輸出一個回車,再輸出提示符. printf "\n${PROMPT}" } # 啟動 tiny shell 解釋器. 從標(biāo)準(zhǔn)輸入不停讀取、并執(zhí)行所給命令.直到 # 使用 CTRL-D 輸入 EOF 為止, 或者輸入 quit 命令退出當(dāng)前解釋器. start_tinyshell() { # 執(zhí)行 python 命令,默認(rèn)會打印 python 版本號和一句幫助提示. # 這里仿照這個行為,打印 tiny shel 版本號和一句幫助提示. echo -e "Tiny shell 1.0.0\nType 'help' for more information." # 捕獲SIGINT信號,以便輸入 CTRL-C 后,不會退出當(dāng)前的 tiny shell. # 注意: 由于子shell會繼承父shell所忽略的信號,所以不能將 SIGINT 信號 # 設(shè)成忽略,而是要指定一個處理函數(shù). 當(dāng)前 shell 所捕獲的信號不會被 # 子 shell 繼承. 所以子 shell 還是可以被 CTRL-C 終止. 即,指定信號處理 # 函數(shù)后,當(dāng)前 tiny shell 不會被CTRL-C終止.但是當(dāng)前 tiny shell 執(zhí)行的 # 命令會運行在子 shell 下,可以用 CTRL-C 終止運行在子 shell 下的命令. # 查看 man bash 對子 shell 的信號繼承關(guān)系說明如下: # traps caught by the shell are reset to the values inherited from # the shell's parent, and traps ignored by the shell are ignored trap "sigint_handler" SIGINT # 如果不使用 -e 選項,輸入上光標(biāo)鍵, read 會讀取到 "^[[A";輸入下光標(biāo)鍵, # read 會讀取到 "^[[B".而使用 -e 選項后,輸入上下光標(biāo)鍵,不會讀取到亂碼, # 但是在子shell中,也不會返回歷史命令.因為shell腳本是在非交互模式下執(zhí)行. # 可以使用 bash 的 -i 選項讓腳本在交互模式下運行,例如: "#/bin/bash -i" while read -ep "${PROMPT}" input; do # 傳遞參數(shù)給函數(shù)時,參數(shù)要用雙引號括起來,避免參數(shù)帶有空格時,會拆分 # 成多個參數(shù). 當(dāng)輸入CTRL-C時, tiny shell 捕獲了這個信號,不會退出 # 當(dāng)前的 tiny shell.但是read命令會被中斷,此時讀取到的 input 為空. # 不需要對空行做處理,所以下面先判斷 input 變量值是否為空. if [ -n "${input}" ]; then handle_input_command "${input}" # 執(zhí)行 history -s 命令把所給的參數(shù)添加到當(dāng)前歷史記錄中.后續(xù) # 通過上下光標(biāo)鍵獲取歷史命令,就可以獲取到新添加的命令.這個只 # 影響當(dāng)前 tiny shell 的歷史記錄,不會寫入外部shell的歷史記錄. history -s "${input}" fi done # 輸出一個換行.當(dāng)用戶輸入CTRL-D結(jié)束執(zhí)行后,需要換行顯示原先的終端提示符. echo } # 循環(huán)調(diào)用 getopts 命令處理選項參數(shù). while getopts "hlvi:ea:d:" opt; do # 調(diào)用parsecfg.sh腳本處理選項的函數(shù)來處理 "lvi:ea:d:" 這幾個選項. # 如果處理成功,就直接繼續(xù)讀取下一個選項,不再往下處理. # handle_config_option()函數(shù)要求傳入的選項以'-'開頭,而getopts命令 # 返回的選項不帶有'-',所以下面在 ${opt} 前面加上一個 '-'. handle_config_option "-${opt}" "${OPTARG}" if [ $? -ne 127 ]; then continue fi case "$opt" in h) show_help ;; ?) echo "出錯: 異常選項,請使用 -h 選項查看腳本的幫助說明." ;; esac done # $# 大于0,說明提供了命令參數(shù). $# 等于OPTIND減去1,說明傳入的參數(shù)都 # 是以 '-' 開頭的選項參數(shù). 此時,直接結(jié)束執(zhí)行,不需要再往下處理. # 下面的 -a 表示兩個表達(dá)式都為真時才為真.表達(dá)式之間不要加小括號. # Shell里面的小括號有特殊含義,跟C語言的小括號有些區(qū)別,加上會有問題. if [ $# -gt 0 -a $# -eq $((OPTIND-1)) ]; then exit 0 fi if [ $# -eq 0 ]; then # 當(dāng)不帶任何參數(shù)時,默認(rèn)啟用 tiny shell. start_tinyshell else # 左移所給的命令參數(shù),去掉已處理過的選項參數(shù),只剩下非選項參數(shù). shift $((OPTIND-1)) # 執(zhí)行腳本時,如果提供了非選項參數(shù),那么第一個參數(shù)認(rèn)為是命令簡寫, # 需要執(zhí)行該命令簡寫對應(yīng)的命令. 第一個參數(shù)之后的所有參數(shù)認(rèn)為是 # 命令的參數(shù). 即,可以在命令簡寫之后提供參數(shù)來動態(tài)指定一些操作. execute_short_command "$@" fi exit
在 bash 中,可以使用 trap 命令捕獲信號,并指定信號處理函數(shù)。
捕獲信號后,可以避免收到某個信號終止腳本執(zhí)行。
當(dāng)前 tinyshell.sh 腳本使用 trap 命令捕獲 SIGINT 信號。
也就是 CTRL-C 鍵所發(fā)送的信號,避免按 CTRL-C 鍵會退出當(dāng)前 tiny shell。
要注意的是,不能設(shè)置成忽略 SIGINT 信號。
在 bash 中,父 shell 所忽略的信號,也會被子 shell 所忽略。
除了內(nèi)置命令之外,當(dāng)前 tiny shell 所執(zhí)行的命令運行在子 shell 下。
如果設(shè)置成忽略 SIGINT 信號,那么子 shell 也會忽略這個信號。
那么就不能用 CTRL-C 來終止子 shell 命令的執(zhí)行。
例如,Android 系統(tǒng)的 adb logcat 命令會不停打印 log,需要按 CTRL-C 來終止。
此時,在 tiny shell 里面按 CTRL-C 就不能終止 adb logcat 的執(zhí)行。
父 shell 所捕獲的信號,子 shell 不會繼承父 shell 所捕獲的信號。
子 shell 會繼承父 shell 的父進(jìn)程的信號狀態(tài)。
父 shell 的父進(jìn)程一般是外部 bash shell 進(jìn)程。
而 bash shell 進(jìn)程默認(rèn)捕獲SIGINT并終止前臺進(jìn)程。
即,雖然當(dāng)前 tiny shell 捕獲了 SIGINT 信號,但是子 shell 并沒有捕獲該信號。
可以在 tiny shell 使用 CTRL-C 來終止子 shell 命令的執(zhí)行。
在 tiny shell 執(zhí)行命令后,默認(rèn)不能用上下光標(biāo)鍵查找到 tiny shell 自身執(zhí)行的歷史命令。
為了可以查找到 tiny shell 自身執(zhí)行的歷史命令,使用 history -s 命令添加命令到當(dāng)前 shell 的歷史記錄。
這個命令只會影響當(dāng)前 shell 的歷史記錄。
退出當(dāng)前 shell 后,在外部 shell 還是看不到 tiny shell 所執(zhí)行的命令。
由于這個 tiny shell 主要是為了執(zhí)行命令簡寫。
這些命令簡寫只有 tiny shell 自身支持,不需要添加到 bash shell 的歷史記錄。
如果想要命令歷史信息添加到外部 shell 的歷史記錄,可以在退出 tinyshell.sh 腳本之前,執(zhí)行 history -w ~/.bash_history 命令把歷史記錄寫入到 bash 自身的歷史記錄文件。
把 tinyshell.sh 腳本放到 PATH 變量指定的可尋址目錄下。
查看 tinyshell.sh 腳本代碼,可知要解析的配置文件名是 tinyshellcmds.txt。
把前面貼出的命令簡寫配置信息寫入 tinyshellcmds.txt 文件。
把這個文件放到 HOME 目錄的 .liconfig 目錄下。
之后,就可以開始執(zhí)行 tinyshell.sh 腳本。
當(dāng)前的 tinyshell.sh 腳本可以執(zhí)行內(nèi)置命令、命令簡寫對應(yīng)的命令、系統(tǒng)自身支持的命令。
當(dāng)不提供任何命令參數(shù)時,會進(jìn)入 tiny shell。
在 tiny shell 中,會不停接收用戶輸入并執(zhí)行對應(yīng)命令。
直到讀取到 EOF 、或者執(zhí)行 quit 命令才會退出 tiny shell。
下面是不進(jìn)入 tiny shell,只處理選項參數(shù)和命令簡寫的例子:
$ tinyshell.sh -v key='gl' value='git log' key='gp' value='git pull --stat --no-tags $(git remote) $(git rev-parse --abbrev-ref HEAD)' key='ll' value='ls --color=auto -l' key='ala' value='adb logcat -b all -v threadtime' $ tinyshell.sh ll -rwxrwxr-x 1 xxx xxx 964 11月 14 17:37 tinyshell.sh 命令簡寫: ll. 命令: ls --color=auto -l
這里先執(zhí)行 tinyshell.sh -v 命令,用鍵值對的形式列出支持的命令簡寫。
此時,只處理所給的選項參數(shù),不會進(jìn)入 tiny shell 里面。
tinyshell.sh ll 命令,提供了一個 ll 參數(shù)(兩個小寫字母 l)。
這個參數(shù)會被當(dāng)成命令簡寫,然后執(zhí)行該命令簡寫對應(yīng)的命令。
執(zhí)行結(jié)束后,不會進(jìn)入 tiny shell 里面。
基于剛才列出的命令簡寫,可知 ll 對應(yīng) ls --color=auto -l 命令。
實際執(zhí)行的也是這個命令。
當(dāng)不提供任何命令參數(shù)時,會進(jìn)入 tiny shell 里面,循環(huán)處理命令。
具體例子如下所示:
$ tinyshell.sh Tiny shell 1.0.0 Type 'help' for more information. TinySh>>> help 下面列出 Tiny Shell 支持的內(nèi)置命令列表和配置的命令簡寫列表. 輸入內(nèi)置命令名或命令簡寫,會執(zhí)行對應(yīng)的命令. 也可以輸入系統(tǒng)自身支持的命令,會在 bash 中執(zhí)行所給命令. 內(nèi)置命令列表: debug: 所給第一個參數(shù)指定打開、或關(guān)閉調(diào)試功能. 其參數(shù)說明如下: on: 打開調(diào)試功能,會執(zhí)行 bash 的 set -x 命令 off: 關(guān)閉調(diào)試功能,會執(zhí)行 bash 的 set +x 命令 help: 打印當(dāng)前幫助信息. quit: 退出當(dāng)前 Tiny Shell. 命令簡寫列表: key='gl' value='git log' key='gp' value='git pull --stat --no-tags $(git remote) $(git rev-parse --abbrev-ref HEAD)' key='ll' value='ls --color=auto -l' key='ala' value='adb logcat -b all -v threadtime' TinySh>>> date 2019年 12月 31日 星期二 17:46:41 CST TinySh>>> ll -C tinyshell.sh 命令簡寫: ll. 命令: ls --color=auto -l -C
當(dāng)執(zhí)行 tinyshell.sh 命令會進(jìn)入 tiny shell 時,會打印一個 “TinySh>>>” 提示符。
在 tiny shell 中執(zhí)行 help 命令可以查看支持的內(nèi)置命令和命令簡寫。
在 tiny shell 中執(zhí)行 date 命令打印當(dāng)前的日期和時間。
當(dāng)前的 tiny shell 自身不支持 date 命令。
這里執(zhí)行了系統(tǒng)自身的 date 命令。
最后執(zhí)行 ll -C 命令。
這里的 ll 是命令簡寫。后面的 -C 是對應(yīng)命令的參數(shù)。
具體執(zhí)行的命令是 ls --color=auto -l -C。
ls 命令的 -C 選項會多列顯示文件名,覆蓋了 -l 選項的效果。
由于 -l 選項的效果被覆蓋,輸出結(jié)果沒有打印文件的詳細(xì)信息,只列出文件名。
可以看到,在命令簡寫之后,可以再提供其他的命令參數(shù)。
即,可以只配置比較長的命令前綴部分,一些簡單的參數(shù)可以動態(tài)提供。
不需要在配置文件中添加很多內(nèi)容相似、只有細(xì)微差異的配置項。
到此,相信大家對“怎么用命令執(zhí)行Shell腳本”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。