腳本面試題
1)一個linux程序經曆的個階段
等待:linux程序等待資源;
運作:linux程序目前正在執行中
停止:linux程序在成功執行後或殺死程序信号後停止
停屍:該程序已經結束,但仍然留在程序表中
2)cut指令
截取檔案的指定部分并列印到标準輸出
cut -d 指定切割符
cut -f 組定截取的段數
[root@server3 extmail]# hostname
server3.example.com
[root@server3 extmail]# hostname| cut -d . -f 2
example
3)cmp和diff差別
Diff 為了使兩個檔案一樣的應該做的修改
Cmp 将兩個檔案通位元組對比,并報告一個不比對項。
4)可以用echo指令代替ls指令嗎
可以. Ls 指令可以用echo指令來代替
Ls列出目錄内容,從替換的角度上講,可以使用 echo *,兩個輸出結果一樣
5)聽說過inode嗎
Inode是一個資料結構,在linux上用于目錄和檔案的辨別,每個檔案在linux上有一個獨立的inode和一個唯一的inode号
對于系統來說,檔案名隻是inode号碼便于識别的别稱或者綽号,表面上,使用者通過檔案名,打開檔案,。實際上,系統内部這個過程分成三步;首先,系統找到這個檔案名對應的inode号碼;其次通過inode号碼,擷取inode資訊;最後,根據inode資訊,找到檔案資料所在的block,讀出資料。
Ls -i 指令列出目錄的整個檔案,即檔案号和inode号碼
[root@server3 mnt]# ls -i 2.sh
11907 2.sh
[root@server3 mnt]# ls -i 3.sh
11965 3.sh
6)shell腳本成功執行之前,如何中斷腳本的執行
Exit指令。 Exit指令被強制輸出非0值,腳本會報錯并退出。0表示成功執行,是以腳本終止執行前執行一個不帶引号的 exit -1 指令會使腳本終止。
7)移除檔案頭
删除檔案 sed ‘1 d’ file
了解sed awk指令
8)檢查一個檔案的某行長度
Sed -n ‘n p ’ file | wc -l
9)可以在linux上檢視所有非列印字元
打開vi編輯器,按esc健,然後按:進入指令模式。在指令交界處輸入 set list指令并執行
10)建立一個目錄,該組的人能在該目錄下建立或通路檔案,但除了該檔案建立者其他人不能删除
Chmod g+wx /mnt/
Chmod +t /mnt/
了解o+t g+s指令
11)如何向腳本傳輸
$* 擷取目前腳本的所有參數
$# 擷取目前腳本的參數的總和
$@ 這個程式的所有參數$1 $2 $3 $4 $5.., 這是激昂參數傳送給其他程式的最佳方式,因為他将會保留所有內嵌在每個參數裡的任何空白
$$ 擷取目前shell程序的PID
$! 擷取執行上一條指令的PID
$? 擷取執行上一條指令的傳回值
$* 将所有指令的所有參數視為單個字元串 等同于“$1 $2 $3”
$@ 将指令每個參視為單獨的字元串,等同于“$1” “$2” “$3”,這是将參數傳遞其他程式的最佳方式,因為他會保留所有内嵌在每個參數裡面的任何空白。
12)如何計算傳進來的參數
$#
13)如何檢查之前的指令是否成功執行?
$?
14)如何擷取一個檔案每一行的第三個元素
Awk ‘{print $3}’
15)假如檔案中第一個元素時FIND,如何擷取第二個元素
| awk ‘{if ($$1 == ‘FIND’)} ’ print $2}’
16)如何調試bash腳本
将 -xv 參數加到 #!/bin/bash
如 #! /bin/bash -xv
17)如何寫一個函數
Funnction example {
}
18)如何連接配接兩個字元串
V1= v2= v3=${v1}${v2}
19)寫出shell腳本中所有的循環
For 循環
For i in $(ls)
Do
Echo “ ”
Done
While循環
Until循環
[root@server3 mnt]# cat 6.sh
!/bin/bash
count=20
until [ $count -lt 10 ]
do
count=$(($count - 1))
done
echo "$count"
20)每個腳本的#!/bin/bash什麼意思
腳本開頭的第一行
一個規範的shell腳本的第一行會指出由那個程式來執行腳本的内容.
!為幻數,在執行腳本的時候,核心會根據它來确定哪個程式來解釋腳本中的内容.如果腳本開頭不指定解釋器,那麼就要用對應的解釋器來執行腳本.
Bash test.sh
Python test.py
21)如何擷取第十行
了解sed 用法
22)指令export作用
使變量在子shell中也可以用
23)如何在背景運作腳本
腳本後面添加&
了解背景的運作
24)chmod 500 scripts 作用
使腳本所有者擁有可執行的權限
25)> 做什麼
重定向流到檔案
26)& 和&&差別
& 希望腳本背景運作時使用它
&& 目前一個腳本成功完成以後執行後面的指令
27)什麼時候要在【condition】之前使用if
當條件滿足時需要運作多條指令的時候
28)執行name=jono && echo 'my name is $name'的輸出
[root@server3 mnt]# name=jono && echo 'my name is $name'
my name is $name
29)指令echo ${new:-variable}的輸出
[root@server3 mnt]# echo ${new:-variable}
variable
了解字元串的操作
30)‘ 和 “ 差別
‘ 不希望把變量轉換為值時使用它
“ 會計算所有變量的值并用值代替
單引号;所見及所得.即将單引号裡内容原樣輸出
雙引号:把雙引号裡面内容輸出出來,如果内容中有指令,變量等,會先把指令,變量解釋出來,然後輸出最終内容.
31)如何在腳本中重定向标準輸出和标準錯誤
Exec > log.txt 2>&1
了解重定向
32)如何隻用echo 指令擷取字元串變量的一部分
Echo ${variable ;x:y}
33)如何計算本地使用者的數目
[root@server3 mnt]# wc -l /etc/passwd | cut -d " " -f 1
23
34)列出UID小于100
Awk -F: ‘$3 < 100’ /etc/passwd
35)如何列印變量最後5個字元
| echo ${variable : -5}
36)${variable:-10} 和 ${variable: -10} 前者如果之前沒有給指派則輸出10,如果指派理論則輸出改變,後者輸出varible最後10個字元
37)了解tr 替換指令
38)expore $variable 或 export variable 哪個正确
後者正确
39)如何列出第二個字母是a 或b 檔案
ls -d ?[ab]*
40)寫出0~100中3的倍數
[root@server3 mnt]# cat m7.sh
!bin/bash
for i in {0..100..3}
echo $i
41)【$a = $b】 和 【$a -eq $b】差別
前者用于字元串的比較,後者擁有數字的比較
51)= 和 ==差別
前者用于變量指派,後者用于字元串比較。
52)如何在shell中更改标準的域分隔符為 :
| IFS=“:”
53)如何去除字元串的所有空格
| echo $string | tr -d “ ”
54)重寫這個指令,将輸出變量轉換為複數
55)如何輸出目前shell的PID
[root@server3 mnt]# echo $$
1060
56)如何在bash 中定義數組
[root@server3 mnt]# arrary=("hi" "my" "name")
57)如何列印數組的第一個元素
[root@server3 mnt]# echo ${arrary[0]}
hi
58)如何列印數組的所歐元素
[root@server3 mnt]# echo ${arrary[@]}
hi my name
59)如何輸出數組的索引
[root@server3 mnt]# echo ${!arrary[@]}
0 1 2
60)如何移除數組的索引為2的元素
[root@server3 mnt]# unset arrary[2]
61)如何在數組中添加ID為333的元素
[root@server3 mnt]# arrary[333]="new_pp"
了解數組的相關知識。