如何學習shell?
學習Shell和學習程式設計語言都是一樣的,需要掌握基礎語言格式,按照計算機的标準寫代碼,計算機才可以正确執行指令。
基礎内容需要進行不斷練習,而不需要刻意記憶,接下來有網友回複要多一些實戰應用,後續都會進行更新,然而,具備了基礎的文法處理能力,按照一定流程組織起來就可以完成各種複雜的項目。這就是程式設計的核心能力,程式設計邏輯。
程式設計邏輯可以直接通過學習實戰樣例,在實踐中逐漸加強,也可以單獨練習算法題目,是以,有C++或者Python、Java刷題競賽的經驗,學習任何語言和項目都是事半功倍。
什麼是函數?
函數就是一個功能子產品,也可以看成是一個黑箱。比如一個絞肉機,放進去牛肉,會生成牛肉卷;放進去羊肉會生成羊肉卷。
我們寫一個a-b之間所有數字之和的函數,比如,傳遞進去,1和100,傳回一個結果1+2+3+...+100=5050。這就是一個函數功能,使用者不需要知道這個函數如何實作,隻需知道要傳遞什麼樣的資料,可以傳回什麼資料。
相當于我們做好一個工具包,裡面包括螺絲刀、鉗子、扳手等等,使用時候直接拿出來用就可以,工具做好可以重複使用,而這就是函數的複用性。
函數的定義、調用和傳回值
shell中的函數類似于C/C++中的函數,但return的傳回值與C/C++不同,傳回的是exit code,取值為0-255,0表示正常結束。
如果想擷取函數的輸出結果,可以通過echo輸出到stdout中,然後通過$(function_name)來擷取stdout中的結果。
函數的return值可以通過$?來擷取。
指令格式:
[function] func_name() { # function關鍵字可以省略
語句1
語句2
...
}
f(){
echo "打開試卷"
echo "填寫姓名"
echo "開始答題"
return 123
}
f
echo $?
echo $(f)
hioier@yunpc:~$ ./test.sh
打開試卷
填寫姓名
開始答題
123
打開試卷 填寫姓名 開始答題
函數參數
函數的輸入參數
在函數内,$1表示第一個輸入參數,$2表示第二個輸入參數,依此類推。
注意:函數内的$0仍然是檔案名,而不是函數名。
add(){
a=$1
b=$2
echo `expr $a + $b`
}
echo $(add 1 2)
遞歸求和
sum(){
if [ $1 -le 0 ]
then
echo 0
return 0
fi
ret=$(sum `expr $1 - 1`)
echo `expr $ret + $1`
}
echo $(sum 100)
exit指令
exit指令用來退出目前shell程序,并傳回一個退出狀态;使用$?可以接收這個退出狀态。
exit指令可以接受一個整數值作為參數,代表退出狀态。如果不指定,預設狀态值是 0。
exit退出狀态隻能是一個介于 0~255 之間的整數,其中隻有 0 表示成功,其它值都表示失敗。
if [ $# -eq 1 ]
then
echo "yes"
exit 0
else
echo "no"
exit 1
fi
hioier@yunpc:~$ ./test.sh 0
yes
hioier@yunpc:~$ echo $?
0
hioier@yunpc:~$ ./test.sh
no
hioier@yunpc:~$ echo $?
1
hioier@yunpc:~$ cat test.sh
檔案輸入輸出重定向
add(){
a=$1
b=$2
echo `expr $a + $b`
}
read -p "a:" a
read -p "b:" b
echo $(add $a $b)
hioier@yunpc:~$ ./test.sh < data.in > data.out
hioier@yunpc:~$ cat data.out
7
視訊教程
視訊加載中...
相關推薦
- Linux革命性工具,shell腳本自動化
- Linux革命性工具,shell腳本循環結構重複執行指令
- Linux革命性工具,shell腳本選擇結構讓程式更加智能
- Linux Shell三劍客之awk,功能強大的文本處理工具
- 什麼是C++變量,就是存儲資料的盒子
- C++輸入輸出流,輸出是調試程式最重要的方法