鍍金池/ 教程/ 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ù)運算符、關(guān)系運算符、布爾運算符、字符串運算符等
Shell 數(shù)組:shell 數(shù)組的定義、數(shù)組長度
Shell until 循環(huán)
Shell if else 語句
Shell 變量:Shell 變量的定義、刪除變量、只讀變量、變量類型
Shell 字符串
Shell 與編譯型語言的差異
Shell 函數(shù):Shell 函數(shù)返回值、刪除函數(shù)、在終端調(diào)用函數(shù)
Shell 替換
Shell case esac 語句
Shell for 循環(huán)
什么時候使用 Shell
Shell 注釋
幾種常見的 Shell
Shell while 循環(huán)
Shell break 和 continue 命令

Shell 替換

如果表達式中包含特殊字符,Shell 將會進行替換。例如,在雙引號中使用變量就是一種替換,轉(zhuǎn)義字符也是一種替換。

舉個例子:

#!/bin/bash

a=10
echo -e "Value of a is $a \n"

運行結(jié)果:

Value of a is 10

這里 -e 表示對轉(zhuǎn)義字符進行替換。如果不使用 -e 選項,將會原樣輸出:

Value of a is 10\n

下面的轉(zhuǎn)義字符都可以用在 echo 中:

轉(zhuǎn)義字符 含義
\|反斜杠
\a 警報,響鈴
\b 退格(刪除鍵)
\f 換頁(FF),將當前位置移到下頁開頭
\n 換行
\r 回車
\t 水平制表符(tab 鍵)
\v 垂直制表符

可以使用 echo 命令的 -E 選項禁止轉(zhuǎn)義,默認也是不轉(zhuǎn)義的;使用 -n 選項可以禁止插入換行符。

命令替換

命令替換是指 Shell 可以先執(zhí)行命令,將輸出結(jié)果暫時保存,在適當?shù)牡胤捷敵觥?/p>

命令替換的語法: command 注意是反引號,不是單引號,這個鍵位于 Esc 鍵下方。

下面的例子中,將命令執(zhí)行結(jié)果保存在變量中:

#!/bin/bash

DATE=`date`
echo "Date is $DATE"

USERS=`who | wc -l`
echo "Logged in user are $USERS"

UP=`date ; uptime`
echo "Uptime is $UP"

運行結(jié)果:

Date is Thu Jul  2 03:59:57 MST 2009
Logged in user are 1
Uptime is Thu Jul  2 03:59:57 MST 2009
03:59:57 up 20 days, 14:03,  1 user,  load avg: 0.13, 0.07, 0.15

變量替換

變量替換可以根據(jù)變量的狀態(tài)(是否為空、是否定義等)來改變它的值

可以使用的變量替換形式:

形式 說明
${var} 變量本來的值
${var:-word} 如果變量 var 為空或已被刪除(unset),那么返回 word,但不改變 var 的值
${var:=word} 如果變量 var 為空或已被刪除(unset),那么返回 word,并將 var 的值設(shè)置為 word。
${var:?message} 如果變量 var 為空或已被刪除(unset),那么將消息 message 送到標 準錯誤輸出,可以用來檢測變量 var 是否可以被正常賦值。若此替換出現(xiàn)在 Shell 腳本中,那么腳本將停止運行。
${var:+word} 如果變量 var 被定義,那么返回 word,但不改變 var 的值。

請看下面的例子:

#!/bin/bash

echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}"

echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}"

unset var
echo ${var:+"This is default value"}
echo "3 - Value of var is $var"

var="Prefix"
echo ${var:+"This is default value"}
echo "4 - Value of var is $var"

echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"

運行結(jié)果:

Variable is not set
1 - Value of var is
Variable is not set
2 - Value of var is Variable is not set

3 - Value of var is
This is default value
4 - Value of var is Prefix
Prefix
5 - Value of var is Prefix