1. 程式人生 > >shell程式設計基礎經典常見問題及解答

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