1. 程式人生 > 其它 >面試常用shell指令碼_搞懂Linux Shell這些知識,面試提問再也不怕了,工作也遊刃有餘...

面試常用shell指令碼_搞懂Linux Shell這些知識,面試提問再也不怕了,工作也遊刃有餘...

技術標籤:面試常用shell指令碼

作為一名IT工程師,尤其是Linux軟體工程師,shell指令碼的編寫是必不可少的技能。面試中時常會遇到shell方面的提問,那麼面試官會問什麼呢?本篇我就帶來常見的提問及解答。

引言:身邊不少shell學習者,在剛開始學習shell總喜歡玩些花活,基本知識不紮實。其實在工作中沒有那麼多花活,工作中更多要求的是解決思路,不是說寫個貪吃蛇這類小遊戲就可以了,而良好的解決思路需要工作的磨練。剛開始,我們還是要紮實基礎,因為面試官不會問你shell怎麼實現貪吃蛇的。

寫指令碼中你?

什麼是Shell指令碼及如何檢視你用的Shell

不用那麼高大上的理解,Shell指令碼就是一個文字檔案,什麼文字檔案呢?包含Shell命令及程式碼塊的文字檔案,幫助我們有序的處理一些事情。如何檢視自己用的是哪一個Shell直譯器呢?如下:

# 終端輸入echo $SHELL

“#! /bin/bash”什麼用途

我們都知道Shell直譯器有很多種,具體有什麼就不多少了。這句話就是指定Shell直譯器去解釋我們的指令碼。其實,不帶這行也是可以的,指令碼就可以直接執行了,當然許可權要給夠,它會按照Linux系統預設的直譯器去解釋。當然,我們也可以指定其他直譯器去解釋它。

# 如下兩種執行方式./file/bin/bash file

變數分類

我的總結有兩種分類。第一種是按照變數值分為普通變數、命令變數,第二種是按照作用域分為區域性變數、全域性變數、環境變數。演示如下:

# 普通變數和命令變數Var_1="shell"Var_2=`ls`Var_3=$(ls)#區域性變數、全域性變數和環境變數Var_4="shell"  #函式外部local Var_5="shell" #函式內部區域性變數可覆蓋同名全域性變數echo $SHELL #這個SHELL就是環境變數

標準錯誤、標準輸出重定向到日誌檔案裡

重定向操作其實沒啥,我們用的最多的就是輸出重定向,及標準輸出、標準錯誤重定向到檔案裡。操作很簡單,如下所示:

/bin/bash shell_file  > output_file 2>&1/bin/bash shell_file &> output_file 

$?是什麼意思

Shell執行完畢每個命令都會有一個返回值,這個返回值就是用$?去接收。一般$?等於0則表示上個命令執行成功,否則就是失敗,具體可檢視日誌檔案或者標準輸出。所示我們會用這個$?去做一些邏輯判斷,去執行不同的程式碼。

VAR=`ls`if [ ${VAR} -ne 0 ];then程式碼1 else   程式碼2 fi  

break的作用

這個就通用理解了,跟C語言一樣,在迴圈中,遇到條件,我們可以使用break跳出迴圈去執行下段程式碼。當然,continue還是繼續新的迴圈,跳過了迴圈塊中的後續程式碼。

for迴圈使用方式

這個跟C語言有點區別,有兩種方式去操作,如下所示:

for 變數名 in 變數取值列表do   執行語句donefor x in $(seq 2) doecho $xdonefor((exp1;exp2;exp3))do   執行語句donefor((x=1;x<3;x++))doecho $xdone

Shell內建特殊變數

這個是Shell獨一無二的。$0表示指令碼名,$1表示指令碼的第一個命令列引數...$9表示指令碼的第九個命令列引數,大於10個引數的表示則用${10...},獲取命令列引數個數則用$#,獲取命令列引數資訊則用$*。

測試表達式

有四種方式:test、[]、[[]]、(())。但是使用方式略有區別,我們要做的就是記著運算子的使用方式以及邊界空格問題,一般新手會在這裡“入坑”。如下圖所示:

測試表達式{test、[]、[[]]、(())}使用區別

這裡流程控制語句就說了一個for迴圈,當然還有其它也是常用的,都可以去掌握一下。基礎知識其實也就這麼些,這些掌握了牢固,日常工作需求還是可以完成的。

喜歡的點贊支援一下,謝謝!