什么是linux
linux可以為我們做什么
- 打游戲
- 下軟件
- 聽音樂
系統(tǒng)服務(wù)器
- 連接Internet 網(wǎng)絡(luò)
- 使用linux作為防火墻,路由器和DHCP服務(wù)器來保護(hù)和管理專用網(wǎng)絡(luò)
- 運行WEB服務(wù)器
- 運行郵件服務(wù)器
- 運行文件服務(wù)器
linux的優(yōu)點
- 自由庶香,免費四敞,開源
- 無需不停的重新引導(dǎo)
- 在不干擾其他服務(wù)的情況下啟動/停止服務(wù)
- 軟件的可移植性
- 可下載的應(yīng)用程序-綠色軟件
- 沒有隱藏在代碼或寄存器中的設(shè)置
- 成熟桌面系統(tǒng):GNOME.KDE.X Window
- 不受病毒的困擾
linux 龐大的市場
- 自動汽車駕駛
- 辦公
- 醫(yī)療B超
- 飛機
- 辦公設(shè)備
linux體系結(jié)構(gòu)
- Linux 內(nèi)核
- Shell
- 文件系統(tǒng)
- 實用程序
- linux內(nèi)核
- 內(nèi)核是linux系統(tǒng)的最底層泛源,提供了系統(tǒng)的核心功能,并允許進(jìn)程以一種有序的方式訪問硬件
- linux的系統(tǒng)啟動過程包括四個步驟:
- 設(shè)備加電
- BIOS自檢
- Grub/lilo引導(dǎo)啟動
- 裝載linux內(nèi)核
- 系統(tǒng)初始化
- 用戶登錄
- 系統(tǒng)初始化:內(nèi)核初始化階段將啟動系統(tǒng)進(jìn)程和腳本忿危,init進(jìn)程系統(tǒng)開始的第一個工作达箍,它是其他所有的進(jìn)程父進(jìn)程,并一直處于運行狀態(tài)铺厨。使用top查看進(jìn)程缎玫。
- EXT2.EXT3都是linux系統(tǒng)默認(rèn)使用的文件系統(tǒng)類型。EXT3屬于日志文件系統(tǒng)解滓,是EXT2文件系統(tǒng)的升級版赃磨,EXT4是EXT3的升級版本
swap類型的文件系統(tǒng)在linux系統(tǒng)的安裝文件- linux目錄結(jié)構(gòu)
- linux系統(tǒng)使用樹型目結(jié)構(gòu),在整個系統(tǒng)中只存在一個根目錄
- liunx系統(tǒng)中總是將文件系統(tǒng)掛載到樹型目錄結(jié)構(gòu)中的某個目錄節(jié)點中使用洼裤。
linux目錄結(jié)構(gòu)
- /bin-用來儲存用戶命令
- /home-用戶目錄
- /root根用戶(超級用戶管理員)的主目錄
- /mnt-系統(tǒng)引導(dǎo)后被掛載文件系統(tǒng)的掛載點
- /tmp-臨時目錄
- /dev-設(shè)備目錄
-/usr/bin/存放用戶目錄
-/etc-系統(tǒng)相關(guān)配置的文件
-/lib-共享目錄
基本知識
- ctrl+alt+t顯示終端邻辉。
- 點擊左上角的搜索按鈕,輸入terminal腮鞍,出來一個終端選項
注意:點擊左邊圖標(biāo)終端值骇,將終端lock在桌面的左邊- 關(guān)機
-右上角
-在終端下關(guān)機(1)sudo shutdown -h now
(2)sudo init 0- 關(guān)閉終端:exit
- 怎么獲取超級管理權(quán)限:輸入su;如果認(rèn)證失斠乒(1)sudo passwd進(jìn)行修改超級用戶管理員權(quán)限的密碼
- 超級用戶管理員---》普通用戶 exit
- 修改登錄密碼:sudo passwd xxx用戶回車
- shell基本命令
- pwd:present work directory顯示當(dāng)前工作路徑
- ls:list顯示當(dāng)前工作路徑下的目錄或者文件
- ls-l:顯示當(dāng)目錄下所有文件并且告知文件的相關(guān)屬性
- ls-a:顯示當(dāng)前目錄下是所有文件(包括隱藏文件:點開頭)
- ls-al:集合上面兩個特性
- ls+具體路徑:顯示具體目錄下的子文件或子目錄吱瘩。
清空終端屏幕
- clear
- control+l
切換目錄
- cd:change directory:改變工作路徑
- cd+具體路徑:切換到具體路徑下面
- cd:切換用戶主目錄下
- cd.:.代表當(dāng)前路徑。
- cd..:..代表當(dāng)前目錄的上一層目錄
- cd:代表用戶主目錄
- cd-:代表回到上一次操作的目錄
tab鍵使用
- 補全當(dāng)前系統(tǒng)下已有的shell命令,補全文件名
新建目錄
- makdir:make directory:創(chuàng)建目錄
- makdir+文件名:在當(dāng)前工作路徑下創(chuàng)建目錄文件
- makdir -p 1010/1009:創(chuàng)建1010目錄的同時創(chuàng)建1009目錄
- rmdir;remove directory:刪除目錄
- rmdir+目錄名:刪除空目錄不能刪除非空目錄
- rm -r+目錄名:刪除非空目錄
創(chuàng)建文件
- touch:創(chuàng)建普通文件
- touch +文件名:在當(dāng)前目錄下創(chuàng)建普通文件
刪除文件
- rm+文件名:在當(dāng)前目錄下刪除對用的文件
拷貝文件
- cp:copy拷貝 文件
- cp +要拷貝的文件+拷貝到那個目錄下
移動或者是重命名
- mv:move移動文件
- mv +要移動的文件+移動到那個目錄下
- mv +要修改的文件+新的文件名
查看文件內(nèi)容不需要打開文件
- cat +文件名
vi
- vi是一個文本編輯器
- vim是vi的升級版本
- 沒有安裝的話就在終端上面輸入sudo apt-get install vim
- 如果遇到?E:no package...問題,解決之道
sudo apt-getupdate
gedit
- 是什么
- gedit是一個文本編輯器
文件權(quán)限修改
- -rw- r-- r--(-rwxr--r--)
-分析:第一個字母決定文件是什么文件;-代表普通文件;d:代表是目錄文件- 第二個字母~第四個字母決定決定文件屬主用戶對其文件執(zhí)行的權(quán)限r(nóng)wx;r可讀;w可寫;x可執(zhí)行;
- 第五個~第七個字母,決定與屬主用戶同組的其他用戶執(zhí)行的權(quán)限
- 最后幾個字母,決定與屬主用戶不同組的其他用戶執(zhí)行的權(quán)限
chmod使用
- chmod 744 1.sh
- chmod u+x 1.sh;
- chmod u+x,g+w,o+w
u:usr代表屬主用戶;g:group同組的其他用戶;o:other不同組的用戶; a:all代表所有人- +:代表加某個權(quán)限; -:代表減掉某個權(quán)限
vim使用
- 打開文件:vim 1.sh
- 插入數(shù)據(jù):按下i鍵,等待左下出現(xiàn)insert字樣時,開始寫數(shù)據(jù)
- 保存:按下ESC鍵,進(jìn)入一個非可編輯模式,shift+:;輸入w表示保存
- 退出:按下ESC鍵,進(jìn)入一個非可編輯模式,shift+:;輸入q表示退出;
退出的方式
- 注意點:一定要在非可編輯模式下進(jìn)行操作
- :w保存
- :q退出
- :wq保存退出
- :q!不保存退出
- :wq!忽略之前保存的內(nèi)容
vi快捷鍵
- dd:刪除光標(biāo)所在一行
- u:撤銷上一次的操作
- yy:復(fù)制光所在的一行,p:粘貼到光標(biāo)所在行的下一行
- 2dd:刪除從光標(biāo)起數(shù)兩行
- 2yy:復(fù)制從光標(biāo)起數(shù)兩行
- 如果刪除/復(fù)制多行,在非可編輯模式下進(jìn)行操作,按下shift+v進(jìn)入可視化模式,上下鍵選擇要刪除/復(fù)制的部分,按d/p鍵
vim簡單配置
- cd /etc/vim
-sudo vim vimrc
- 來到最下面按i鍵進(jìn)入插入模式
- set mouse=a 鼠標(biāo)選中
- set nu 顯示行號
- syntax on 語法高亮
- set autoindent 自動縮進(jìn)
- set tabstop=4 縮進(jìn)tab鍵字符寬度
- 進(jìn)行保存退出
shell腳本執(zhí)行
- chmod +x xx.sh ;./xx.sh
- 注意點:最好使用第一種
注釋
:代表單行注釋
shell腳本是一個弱類型的語言
- 不需要指定數(shù)據(jù)類型
- 如果變量沒有定義,那么這變量默認(rèn)為空
- 如果shell腳本文件某一行出錯,不會影響我整個程序的運行
標(biāo)識符的命名規(guī)范
- 硬件規(guī)范
- 不能數(shù)字開頭
- 只能由字母,下劃線,數(shù)字構(gòu)成
- 不能與shell腳本的關(guān)鍵字相同if printf echo case等
- 建議:
- 不準(zhǔn)用拼音,多查字典
- 建議使用駝峰命名規(guī)范numOfStudent
- 見名知義
變量的定義
- 變量=值
- 注意點:變量一定義出來,就必須給他一個值,否則語法錯誤
- =號左右兩邊不能有空格
- 如果右邊是字符串,用""括起來
- 變量的使用
- 以$符號開頭
echo簡單用法
- echo:表明輸出命令,輸出echo后面的內(nèi)容,會自動換行
- echo后面是否加"",'',不加;
- 加''里面寫什么輸出什么;例如value="hello"
echo '$value';輸出結(jié)果是$value- 不加;降低程的可讀性
- 加"";能避免上面兩個缺點
- value="hello"
echo "{$value}1"
加{},不是(),為了分清變量
shell轉(zhuǎn)義字符
- \n:代表換行
- \t:相當(dāng)于敲了一個tab鍵的寬度
echo -e開啟轉(zhuǎn)義
- 如果是./xx.sh運行shell腳本,必須開啟轉(zhuǎn)義; value="hello"
echo "$value\n"是不會換行- 開啟轉(zhuǎn)義對特殊字符進(jìn)行處理
echo -e "${value}\n"- 如果是sh xx.sh運行shell腳本,不需要開啟轉(zhuǎn)義
value="hello"
echo "${value}\n"是會換行的
變量的刪除
- unset:unset 刪除變量,不需要加$例如
value=9
echo "$value1"
unset value1
echo "value1"
輸出為:9空
unset刪除變量,刪除的變量默認(rèn)為空
只讀變量
- readonly value=7,表明這個變量將來不能被重新賦值
- readonly修飾的變量不能被unset刪除
字符串相關(guān)處理方法
- 計算字符串長度
value="hello"
length=${#value}
echo "${length}"
- 字符串拼接
value1="hello"
value2="world"
value3="${value1} ${value2}"
echo "${value3}"
3.字符串截取
value1="hello world"
value2=${value1:6:5}
#字符串從0開始迹缀,:6代表從0開始數(shù)到第6位開始裁使碾,:5為截取的長度
printf
value="hello"
printf "value=%s\n"
"${value}"
- 用法:printf是輸出""里面的內(nèi)容;
%s:是一個占位符,嚴(yán)格意義上來說是輸出字符串類型的- %f:是一個占位符,后面必須是小數(shù)類型的數(shù)值占位
- %d:是一個占位符,后面必須是整數(shù)類型的數(shù)值占位
- %c:是一個占位符,后面必須是字符類型的數(shù)值占位
- \n:轉(zhuǎn)義字符
- 如果想用printf同時輸出多個變量的值
value="hello"
value1=8
printf "value=%s\nvalue1=%d\n" "${value}" "${value1}"
- %.3f:表明小數(shù)點后面保留3位
- %6.3f:6表明整個數(shù)據(jù)所占寬度為6個字
- %m.nf:右對齊
- 如果m<=n+1+整數(shù)實際所占個數(shù),m無效
- 如果m>n+1+整數(shù)實際所占個數(shù),m才會出現(xiàn)一定的效果
- %-m.nf:左對齊
- %md:
- %ms:
- %mc:
read
printf "請輸入一個值"
read value
printf "這個值為%s\n" "${value}"
- 用法:鍵讀入一個值,賦給read
- 注意:read盡量不要使用同時輸入多個值,比如read value1 value2
運算符
- 算數(shù)運算+ - * / %
- 注意點:expr是計算整數(shù)類型行的數(shù)據(jù)
- 運算符左右兩邊都必須要有空格
- ``和$()都是取結(jié)果集
- 注意乘法*必須要通過轉(zhuǎn)義*,不然出錯
num1=1
num2=2
num3=`expr $num1 \* $num2`
echo "${num3}"
num1=1
num2=2
num3=`expr $num1 + $num2`
echo "${num3}"
- `` 和$()不但可以取整數(shù)運算的結(jié)果集,還可以去shell命令結(jié)果集,比如:result=$(ls)皱卓,但是兩者后都要有expr
- num1%num2求num1/num2=商……余
num1=1
num2=2
num3=$(expr $num1 % $num2)
echo "${num3}"
- !:表示取反
echo "請輸入一個數(shù):"
read num
if [ ! $num -gt 8 ]
then
echo "<=8"
else
echo ">8"
fi
- &&:表示并且
- 第一種寫法
echo "請輸入一個數(shù):\n"
read num
if [ `expr $num % 5` == 0 ]&&[ `expr $num % 3`==0 ]
then
echo "這是3,5的倍數(shù)"
else
echo "這不是3,5的倍數(shù)"
fi
- 用法:事件1&&事件2:事件1成立并且事件2成立,整個事件才成立,否則整個事件不成立
- 事件1||事件2:兩個事件只要有一個事件成立,整個事件就成立
- 第二種寫法
echo "請輸入一個數(shù):\n"
read num
if [[ `expr $num % 5` == 0 && `expr $num % 3`==0 ]]
then
echo "這是3,5的倍數(shù)"
else
echo "這不是3,5的倍數(shù)"
fi
- 第三種用法
printf "請輸入一個年份:\n"
read year
if [ `expr $year % 4` == 0 -a `expr $year % 100` != 0 ] || [ `expr $year % 400` == 0 ]
then
echo "是閏年"
else
echo "不是閏年"
fi
- ||:表示或者
printf "請輸入一個年份:\n"
read year
if [[ `expr $year % 4` == 0 && `expr $year % 100` != 0 ]] || [ `expr $year % 400` == 0 ]
then
echo "是閏年"
else
echo "不是閏年"
fi
let關(guān)鍵字
- 注意點:用了let之后 , let num3=$num1+$num2是錯誤的部逮,let num3=num1+num2才是正確的
num1=1
num2=2
let num3=num1+num2
echo "${num3}"
用在哪些的運算符:
- 算數(shù)運算符:+ - * / % ++ --
- 賦值運算符:+= -= *= /= %=
- 后綴++
num1=1
let num3=num1++
echo "${num3}"
echo "${num1}"
- 結(jié)果為:1 2
- 前綴++
num1=1
let num3=++num1
echo "${num3}"
echo "${num1}"
- 結(jié)果為:2 2
- 后綴--
num1=1
let num3=num1--
echo "${num3}"
echo "${num1}"
- 結(jié)果為:1 0
- 前綴--
num1=1
let num3=--num1
echo "${num3}"
echo "${num1}"
- 結(jié)果為: 0 0
整數(shù)之間的關(guān)系運算符
- < > >= <= != ==
- 在關(guān)系運算符中,運算的結(jié)果是一個邏輯值,如果關(guān)系表達(dá)式成立,邏輯值為1;否則為0
- <, > ,>= ,<=都必要用\進(jìn)行轉(zhuǎn)義
- !=可以用\進(jìn)行轉(zhuǎn)義,也可不用\轉(zhuǎn)義
num1=1
num2=2
num3=`expr $num1 != $num2`
echo "${num3}"
- 結(jié)果為1
- = ,\ =,\ ==, ==(根據(jù)編譯器決定)maco0s支持=,\ =
條件語句
- 如果一個數(shù)大于5,然后輸出這個數(shù),否則 如果這個數(shù)小于五,然后說明這個數(shù)小5
if[]
then
語句體;
fi
- 注意點:[]左右兩邊都要有空格
- 關(guān)系運算符用-gt...表示
printf "請輸入一個數(shù)"
read num
if [ $num -gt 5 ]
then
echo "${num}"
fi
- -gt:>
- -ge:>=
- -lt:<
- -le:<=
- -eq:==
- -ne:!=
- 字母含義
- g:greater
- t:then
- e:equal
- n:not
if []
then
語句體1
elif []
then
語句體
fi
if []
then
語句體1
elif []
then
語句體2
else
語句3
fi
- 注意點:else可以沒有,如果有else,必須放在最后面,else下是沒有then
- elif可以沒有,必須放在if else中間任何位置
- if語句只能執(zhí)行一個分支
- if的結(jié)束標(biāo)志fi
字符串運算符
- =判斷字符串是否相等
- !=判斷字符串是否不相等
- -z:zero,判斷字符串是否為空(沒有字符)或著是不存在或者字符都是空格
printf "請輸入兩個整數(shù):"
read num1
read num2
if [ $num1 -gt $num2 ]
then
printf "最大值為%s\n" "${num1}"
else
printf "最大值為%s\n" "${num2}"
fi
string1="hello"
if [ -z $string1 ]
then
echo "字符串為空"
else
echo "字符串不為空"
fi
- 結(jié)果為不為空
文件運算符
- -d:表示判斷是否是目錄文件
- -f:表示判斷是否是普通文件
- -r:判斷文件是否可讀
- -w:判斷文件是否可寫
- -x:判斷文件是否可執(zhí)行
- -e:判斷文件是否存在
file="1.sh"
if [ -d $file ]
then
echo "目錄文件"
else
echo "不是目錄文件"
fi
結(jié)果是:不是目錄文件
file="1.sh"
if [ -f $file ]
then
echo "是普通文件"
else
echo "不是普通文件"
fi
- 結(jié)果為普通文件
file="11"
if [ -f $file ]
then
echo "是普通文件"
else
echo "不是普通文件"
fi
- 結(jié)果為不是普通文件
file="1.sh"
if [ -e $file ]
then
echo "存在"
else
echo "不存在"
fi
- 結(jié)果為存在
file="share"
if [ -e $file ]
then
echo "已存在這個目錄文件"
else
cd
mkdir "share"
fi
case
case 變量 in
值1))
語句體
;;
值2))
語句體
;;
esac
echo "請輸入一個值"
read num
case $num in
1)
echo "1"
;;
2)
echo "2"
;;
*)
echo "其他"
esac
- 注意點:結(jié)束標(biāo)志必須是esac
- 值1)和值2)可以相同
- 如果值1)和值2)條件都不滿足娜汁,這是會來到*)
- *) 你可以不寫,但是如果要寫就寫在最后
- 沒一個分支結(jié)束之后都有一個 ;;
數(shù)組
- 數(shù)組初始化:一個變量一個變進(jìn)行初始化
array1[0]=8
array1[1]=9
- 注意點:一個一個變量進(jìn)行初始化,可以間隔賦值還可以不從位置0開始.比如
array1[1]=7
array1[5]=8
- 整體數(shù)組賦值
- array={1 2 3 4 hello}
- 數(shù)組元素訪問
- ${數(shù)組名[下標(biāo)]}
- 遍歷數(shù)組名里面所有的元素
- ${數(shù)組命[*]
- ${數(shù)組名[@]}
while循環(huán)
while []
do
語句體
done
sum=0
i=1
while [ $i -le 100 ]
do
let sum=sum+i
let i++
done
echo "sum=${sum}"
- sum為5050,i為101
- 求1~100的偶數(shù)和
sum=0
i=1
while [ $i -le 100 ]
do
if [ `expr $i % 2` -eq 0 ]
then
let sum=sum+i
fi
let i++
done
echo "sum=${sum}"
- 結(jié)果為sum=2550
- 練習(xí)2:9x9乘法表
i=1
j=1
while [ $i -lt 10 ]
do
j=1
while [ $j -le $i ]
do
let k=i*j
printf "%d*%d=%2d " "${i}" "${j}" "${k}"
let j++
done
printf "\n"
let i++
done
- 練習(xí)3:輸入兩個整數(shù)和一個運算符,根據(jù)運算符計算結(jié)果
printf "請輸入兩個整數(shù):"
printf "請輸入運算符:"
read num1
read num2
read ch
case $ch in
"*")
printf "%d*%d=%d" "${num1}" "${num2}" "$((num1*num2))"
;;
"/")
printf "%d/%d=%d" "${num1}" "${num2}" "$((num1/num2))"
;;
"+")
printf "%d+%d=%d" "${num1}" "${num2}" "$((num1+num2))"
;;
"-")
printf "%d-%d=%d" "${num1}" "${num2}" "$((num1-num2))"
;;
*)
printf "其他字符\n"
esac
參數(shù)
- ./xx.sh
- $0:代表執(zhí)行的文件./xx.sh
- $1:代表執(zhí)行的第一個參數(shù)
- $2:代表執(zhí)行的第二參數(shù)
- $n:代表執(zhí)行的第二個參數(shù)
- $#:代表執(zhí)行參數(shù)個數(shù),不包括命令本身
- 判斷是否有參數(shù),參數(shù)是否為1
- 判斷文件是否存在
- 如果存在,判斷文件是否是普通文件
- 改權(quán)限
4.運行- 讓這個命令在全局有效
for循環(huán)
- 格式
for 變量 in 參數(shù)列表
do
done
- 用法解釋:參數(shù)列表為變量一次一次的賦值
value=`ls`
for file in $value
do
echo "${file}"
done
for value in 1 2 3 4 5
do
echo "${value}"
done
break
- break:是跳出整個循環(huán)
i=1
sum=0
while [ $i -le 100 ]
do
if [ $sum -gt 55 ]
then
break
fi
let sum+=i
let i++
done
echo "sum=${sum}"
echo "i=${i}"
- 結(jié)果為:sum=66,i=12
- 分析:當(dāng)i=11,sum>55,不成立sum=55
sum=sum+i,sum=55+11 ,i=12
- 用法:當(dāng)碰到break時,直接跳出循環(huán),break下面的語句不會被執(zhí)行
- break只跳出最近的一循環(huán)
- break只能用在循環(huán)中
count=0
while [ $count -le 1 ]
do
i=1
sum=0
while [ $i -le 100 ]
do
if [ $sum -gt 55 ]
then
break
fi
let sum+=i
let i++
done
let count++
echo "sum=${sum}"
echo "i=${i}"
done
- 結(jié)果為 sum=66,i=12;sum=66,i=12
continue
i=1
sum=0
while [ $i -le 20 ]
do
if [ `expr $i % 10 ` == 3 ]
then
let i++
continue
fi
let sum+=i
let i++
done
echo "sum=${sum}"
- 分析:i=3時,i條件成立,執(zhí)行continue,那么continue以下的語句就不被執(zhí)行,繼續(xù)返回到while判斷的語句看條件是否成立,如果成立繼續(xù)執(zhí)行
- 用法:當(dāng)碰到continue時,跳出本層循環(huán)的當(dāng)前一次循環(huán)continue以下面的語句不會被執(zhí)行
- continue只能用循環(huán)中
死循環(huán)
whlie :
do
語句體
done
shell函數(shù)
- 什么時候用到函數(shù)
- 執(zhí)行的功能類似
- 根據(jù)實際需求 ,進(jìn)行設(shè)置
- shell函數(shù)定義格式
function 函數(shù)名()
{
}
- 調(diào)用shell函數(shù)
- 函數(shù)名
- 函數(shù)參數(shù)傳遞
function test()
{
echo "$0"
echo "$1"
echo "$2"
echo "${10}"
echo "hello worid"
}
test 1 2 3 4 5 6 7 8 9 34
- 分析:當(dāng)參數(shù)作為shell函數(shù)傳遞時,當(dāng)在函數(shù)里面接收n>=10個參數(shù)時,要加上${n};
- $0不是test,而是shell文件本身
- 函數(shù)里面的$1與函數(shù)外面的$1不相同,但是函數(shù)里面的$0與函數(shù)外面的$0相同
function sum()
{
num1=$1
num2=$2
let value=num1+num2
return $value
}
sum 1 2
echo "sum=$?"
sum 2 3
echo "sum=$?"
- 結(jié)果為: sum=3,sum=5
- 分析:函數(shù)如果是return出來的結(jié)果,我們用$?接收,$?是接收最后運行的一次腳本.
- 如果return后面的值>255,那么函數(shù)運行完之后用$?接收,$?=value%256
- 怎么接收return出來的值比255大?問題解決之道:使用echo返回出來,函數(shù)外使用變量接收,value=
函數(shù)名
,從而value進(jìn)行操作- 實際上echo是臨時保存函數(shù)的結(jié)果集
function test()
{
echo 513
}
value=`test`
echo "test函數(shù)的返回值${value}"
- shell函數(shù)總結(jié):
- function函數(shù)可寫可不寫
- shell 函數(shù)可以有return,也可以沒有return
- 如果是return出來的結(jié)果必須要用$?接收
- 如果是echo保存的結(jié)果集,必須要用value=
test
取結(jié)果接收- 函數(shù)里面可以嵌套,可以內(nèi)嵌創(chuàng)建函數(shù)
a()
{
b()
{
}
b
}
a
a()
{
b()
{
echo "==b=="
}
b
}
a
a()
{
b()
{
echo "==b=="
}
}
a
b
6.條件函數(shù)
a()
{
value=9
if [ $value -eq 9 ]
then
b()
{
echo "==b=="
}
else
c()
{
echo "==c=="
}
}
a
b
- 結(jié)果為==b==
- 分析:函數(shù)b和函數(shù)c在什么情況下可以調(diào)用? 先運行函數(shù)a,因為a中有函數(shù)b和c的實現(xiàn).在if條件成立時,實現(xiàn)函數(shù)b的定義,其他情況下,實現(xiàn)函數(shù)c的定義