shell程式設計基礎經典常見問題及解答
考試題1:用source執行指令碼和用bash執行Shell指令碼的區別是什麼?
使用source和.來執行指令碼,相當於在一個shell下面執行指令碼。互相可以可以呼叫。
bash或sh執行指令碼,開啟了一個新的shell,或者說是開啟了一個子shell。
當有巢狀呼叫指令碼的時候,能把子shell腳本里面的變數傳遞過來,作為全域性變數。
考試題2:如何自定義環境變數?
a. export OLDBOY=1
b.OLDGIRL=2
export OLDGIRL
c.declare
declare -x A=1
永久生效處理辦法:
[[email protected]b01 scripts]# tail -1 /etc/profile
export OLDBOY=1
[[email protected] scripts]# . /etc/profile
[[email protected] scripts]# echo $OLDBOY
1
考試題3:定義變數內容,不加引號、單引號、雙引號、反引號結果有什麼不同?應該怎麼用?
a=test #不加引號,也會解析變數,推薦連續數字用此方法。
a='test' #所見即所得。
a="test" #預設雙引號,解析變數。
a=`date` #解析一個命令結果。就用``或$()。
考試題4:請分別說出2個以上用於整數運算特殊符號或命令,以及適合小數運算的命令。
整數:
(()) 推薦
let 推薦
$[]
expr
declare
小數:
bc
awk
結果示例:
考試題5:寫出特殊變數對應的意義及應用
$0 指令碼名字(路徑),比如啟動腳本里傳參
$n、 第n個引數
$#、
$*、 表示全部的引數,引數作為一個整體
[email protected]、 表示全部的引數,但是引數是分開的個體
$?、 執行任務後的返回值,0表示沒有問題
$$、 表示程序的pid,獲取pid值,可以kill程序
$!、 表示上一個程序的Pid號
$_ 表示前一個指令碼的最後一個引數
考試題6:寫出下面特殊變數擴充套件的意義
${oldboy} oldboy變數
${#oldboy} 變數的字元個數
${oldboy:offset:length} 從offset的位置擷取,擷取長度為lenth的值
${oldboy#word} 從變數內容的開頭 刪除含word的第一個字元
${oldboy##word} 從變數內容的開頭 刪除含word的全部字元
${oldboy%word} 從變數內容的尾部 刪除含word的第一個字元
${oldboy%%word} 從變數內容的尾部 刪除含word的全部字元
${oldboy/pattern/string} 對變數內容把第一個pattern替換為符合string
${oldboy//pattern/string}對變數內容把全部pattern替換為符合string
${oldboy:-word} 如果oldboy內容不存在,則使用word來替換
考試題7:在條件測試與表示式中,[]和[[]]有何區別?
邏輯測試表達式中:
[]中 使用 -a -o
[[]]或(())裡面 使用&& ||
此處還需總結了解下
考試題8:說出適合在[]以及test中整數比較的特殊運算子號?
考試題9、輸出下面選單
1.install MySQL
2.install Tomcat
3.exit
當用戶選擇對應的數字就開始安裝對應的服務(可echo輸出替代),需要對使用者輸入的數字進行判斷是否為整數(用條件測試表達式實現)。
#!/bin/sh
cat <<EOF
1.install MySQL
2.install Tomcat
3.exit
EOF
read -t 15 -p "請選擇一個序號(必須是數字):" num
#判斷輸入的值是否為整數
expr 2 + $num &>/dev/null
if [ $? -ne 0 ]
then
echo "Usage:$0 {1|2|3}"
exit 1
fi
#執行選擇的功能序號
if [ $num -eq 1 ]
then
echo "install MySQL ……"
elif [ $num -eq 2 ]
then
echo "install Tomcat ……"
elif [ $num -eq 3 ]
then
echo "bye."
exit
else
echo "Usage:$0 {1|2|3}"
exit 1
fi
考試題10、使用read讀入方式比較兩個整數大小(用條件表示式實現)。
#!/bin/bash
read -t 30 -p "請輸入兩個整數:" a b
#1.判斷是否為整數
expr $a + $b + 2 &>/dev/null
if [ $? -ne 0 ]
then
echo "請輸入兩個整數。"
exit
fi
#2.表示第二個引數不能為空
[ -z "$b" ] && {
echo “請輸入兩個整數。”
exit
}
if [ $a -gt $b ]
then
echo "$a > $b"
elif [ $a -eq $b ]
then
echo "$a = $b"
else
echo "$a < $b"
fi