Linux基礎(chǔ)知識

什么是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)
  • 實用程序
  1. linux內(nèi)核
  • 內(nèi)核是linux系統(tǒng)的最底層泛源,提供了系統(tǒng)的核心功能,并允許進(jìn)程以一種有序的方式訪問硬件
  1. linux的系統(tǒng)啟動過程包括四個步驟:
  • 設(shè)備加電
  • BIOS自檢
  • Grub/lilo引導(dǎo)啟動
  • 裝載linux內(nèi)核
  • 系統(tǒng)初始化
  • 用戶登錄
  1. 系統(tǒng)初始化:內(nèi)核初始化階段將啟動系統(tǒng)進(jìn)程和腳本忿危,init進(jìn)程系統(tǒng)開始的第一個工作达箍,它是其他所有的進(jìn)程父進(jìn)程,并一直處于運行狀態(tài)铺厨。使用top查看進(jìn)程缎玫。
  2. EXT2.EXT3都是linux系統(tǒng)默認(rèn)使用的文件系統(tǒng)類型。EXT3屬于日志文件系統(tǒng)解滓,是EXT2文件系統(tǒng)的升級版赃磨,EXT4是EXT3的升級版本
    swap類型的文件系統(tǒng)在linux系統(tǒng)的安裝文件
  3. 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-共享目錄

基本知識

  1. ctrl+alt+t顯示終端邻辉。
  2. 點擊左上角的搜索按鈕,輸入terminal腮鞍,出來一個終端選項
    注意:點擊左邊圖標(biāo)終端值骇,將終端lock在桌面的左邊
  3. 關(guān)機
    -右上角
    -在終端下關(guān)機(1)sudo shutdown -h now
    (2)sudo init 0
  4. 關(guān)閉終端:exit
  5. 怎么獲取超級管理權(quán)限:輸入su;如果認(rèn)證失斠乒(1)sudo passwd進(jìn)行修改超級用戶管理員權(quán)限的密碼
  6. 超級用戶管理員---》普通用戶 exit
  7. 修改登錄密碼:sudo passwd xxx用戶回車
  8. 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腳本是一個弱類型的語言

  1. 不需要指定數(shù)據(jù)類型
  2. 如果變量沒有定義,那么這變量默認(rèn)為空
  3. 如果shell腳本文件某一行出錯,不會影響我整個程序的運行

標(biāo)識符的命名規(guī)范

  • 硬件規(guī)范
  1. 不能數(shù)字開頭
  2. 只能由字母,下劃線,數(shù)字構(gòu)成
  3. 不能與shell腳本的關(guān)鍵字相同if printf echo case等
  • 建議:
  1. 不準(zhǔn)用拼音,多查字典
  2. 建議使用駝峰命名規(guī)范numOfStudent
  3. 見名知義

變量的定義

  1. 變量=值
  • 注意點:變量一定義出來,就必須給他一個值,否則語法錯誤
  • =號左右兩邊不能有空格
  • 如果右邊是字符串,用""括起來
  1. 變量的使用
  • 以$符號開頭

echo簡單用法

  1. echo:表明輸出命令,輸出echo后面的內(nèi)容,會自動換行
  2. echo后面是否加"",'',不加;
  • 加''里面寫什么輸出什么;例如value="hello"
    echo '$value';輸出結(jié)果是$value
  • 不加;降低程的可讀性
  • 加"";能避免上面兩個缺點
  • value="hello"

echo "{$value}1"
加{},不是(),為了分清變量

shell轉(zhuǎn)義字符

  1. \n:代表換行
  2. \t:相當(dāng)于敲了一個tab鍵的寬度

echo -e開啟轉(zhuǎn)義

  1. 如果是./xx.sh運行shell腳本,必須開啟轉(zhuǎn)義; value="hello"
    echo "$value\n"是不會換行
  2. 開啟轉(zhuǎn)義對特殊字符進(jìn)行處理
    echo -e "${value}\n"
  3. 如果是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)為空

只讀變量

  1. readonly value=7,表明這個變量將來不能被重新賦值
  2. readonly修飾的變量不能被unset刪除

字符串相關(guān)處理方法

  1. 計算字符串長度
 value="hello"
length=${#value}
echo "${length}"
  1. 字符串拼接
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)義字符
  1. 如果想用printf同時輸出多個變量的值
value="hello"
value1=8
printf "value=%s\nvalue1=%d\n" "${value}" "${value1}"
  1. %.3f:表明小數(shù)點后面保留3位
  2. %6.3f:6表明整個數(shù)據(jù)所占寬度為6個字
  3. %m.nf:右對齊
  • 如果m<=n+1+整數(shù)實際所占個數(shù),m無效
  • 如果m>n+1+整數(shù)實際所占個數(shù),m才會出現(xiàn)一定的效果
  1. %-m.nf:左對齊
  2. %md:
  3. %ms:
  4. %mc:

read

printf  "請輸入一個值"
read value
printf "這個值為%s\n" "${value}"
  1. 用法:鍵讀入一個值,賦給read
  2. 注意:read盡量不要使用同時輸入多個值,比如read value1 value2

運算符

  1. 算數(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

  • &&:表示并且
  1. 第一種寫法
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:兩個事件只要有一個事件成立,整個事件就成立
  1. 第二種寫法
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. 第三種用法
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ù)運算符:+ - * / % ++ --
  • 賦值運算符:+= -= *= /= %=
  1. 后綴++
num1=1
let num3=num1++
echo "${num3}"
echo "${num1}"
  • 結(jié)果為:1 2
  1. 前綴++
num1=1
let num3=++num1
echo "${num3}"
echo "${num1}"
  • 結(jié)果為:2 2
  1. 后綴--
num1=1
let num3=num1--
echo "${num3}"
echo "${num1}"
  • 結(jié)果為:1 0
  1. 前綴--
num1=1
let num3=--num1
echo "${num3}"
echo "${num1}"
  • 結(jié)果為: 0 0

整數(shù)之間的關(guān)系運算符

  • < > >= <= != ==
  1. 在關(guān)系運算符中,運算的結(jié)果是一個邏輯值,如果關(guān)系表達(dá)式成立,邏輯值為1;否則為0
  2. <, > ,>= ,<=都必要用\進(jìn)行轉(zhuǎn)義
  3. !=可以用\進(jìn)行轉(zhuǎn)義,也可不用\轉(zhuǎn)義
num1=1
num2=2
num3=`expr $num1 != $num2`
echo "${num3}"
  • 結(jié)果為1
  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
  1. 注意點:else可以沒有,如果有else,必須放在最后面,else下是沒有then
  2. elif可以沒有,必須放在if else中間任何位置
  3. if語句只能執(zhí)行一個分支
  4. 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

  1. 注意點:結(jié)束標(biāo)志必須是esac
  2. 值1)和值2)可以相同
  3. 如果值1)和值2)條件都不滿足娜汁,這是會來到*)
  4. *) 你可以不寫,但是如果要寫就寫在最后
  5. 沒一個分支結(jié)束之后都有一個 ;;

數(shù)組

  1. 數(shù)組初始化:一個變量一個變進(jìn)行初始化
array1[0]=8
array1[1]=9
  • 注意點:一個一個變量進(jìn)行初始化,可以間隔賦值還可以不從位置0開始.比如
array1[1]=7
array1[5]=8

  1. 整體數(shù)組賦值
  • array={1 2 3 4 hello}
  1. 數(shù)組元素訪問
  • ${數(shù)組名[下標(biāo)]}
  1. 遍歷數(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. 求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
  1. 練習(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

  1. 練習(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
  1. $0:代表執(zhí)行的文件./xx.sh
  2. $1:代表執(zhí)行的第一個參數(shù)
  3. $2:代表執(zhí)行的第二參數(shù)
  4. $n:代表執(zhí)行的第二個參數(shù)
  5. $#:代表執(zhí)行參數(shù)個數(shù),不包括命令本身
  1. 判斷是否有參數(shù),參數(shù)是否為1
  2. 判斷文件是否存在
  3. 如果存在,判斷文件是否是普通文件
  4. 改權(quán)限
    4.運行
  5. 讓這個命令在全局有效

for循環(huán)

  1. 格式
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
  1. 用法:當(dāng)碰到break時,直接跳出循環(huán),break下面的語句不會被執(zhí)行
  2. break只跳出最近的一循環(huán)
  3. 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í)行
  1. 用法:當(dāng)碰到continue時,跳出本層循環(huán)的當(dāng)前一次循環(huán)continue以下面的語句不會被執(zhí)行
  2. continue只能用循環(huán)中

死循環(huán)

whlie :
do
    語句體
done

shell函數(shù)

  1. 什么時候用到函數(shù)
  • 執(zhí)行的功能類似
  • 根據(jù)實際需求 ,進(jìn)行設(shè)置
  1. shell函數(shù)定義格式
function 函數(shù)名()
{
    
}

  1. 調(diào)用shell函數(shù)
  • 函數(shù)名
  1. 函數(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
  1. 分析:函數(shù)如果是return出來的結(jié)果,我們用$?接收,$?是接收最后運行的一次腳本.
  2. 如果return后面的值>255,那么函數(shù)運行完之后用$?接收,$?=value%256
  3. 怎么接收return出來的值比255大?問題解決之道:使用echo返回出來,函數(shù)外使用變量接收,value= 函數(shù)名,從而value進(jìn)行操作
  4. 實際上echo是臨時保存函數(shù)的結(jié)果集
function test()
{
    echo 513
}
value=`test`
echo "test函數(shù)的返回值${value}"
  • shell函數(shù)總結(jié):
  1. function函數(shù)可寫可不寫
  2. shell 函數(shù)可以有return,也可以沒有return
  3. 如果是return出來的結(jié)果必須要用$?接收
  4. 如果是echo保存的結(jié)果集,必須要用value=test取結(jié)果接收
  5. 函數(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的定義
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市兄朋,隨后出現(xiàn)的幾起案子掐禁,更是在濱河造成了極大的恐慌,老刑警劉巖颅和,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件傅事,死亡現(xiàn)場離奇詭異,居然都是意外死亡峡扩,警方通過查閱死者的電腦和手機蹭越,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來教届,“玉大人响鹃,你說我怎么就攤上這事“秆担” “怎么了买置?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長强霎。 經(jīng)常有香客問我忿项,道長,這世上最難降的妖魔是什么城舞? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任轩触,我火速辦了婚禮,結(jié)果婚禮上家夺,老公的妹妹穿的比我還像新娘脱柱。我一直安慰自己,他們只是感情好秦踪,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布褐捻。 她就那樣靜靜地躺著掸茅,像睡著了一般椅邓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昧狮,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天景馁,我揣著相機與錄音,去河邊找鬼逗鸣。 笑死合住,一個胖子當(dāng)著我的面吹牛绰精,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播透葛,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼笨使,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了僚害?” 一聲冷哼從身側(cè)響起硫椰,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎萨蚕,沒想到半個月后靶草,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡岳遥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年奕翔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浩蓉。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡派继,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捻艳,到底是詐尸還是另有隱情互艾,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布讯泣,位于F島的核電站纫普,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏好渠。R本人自食惡果不足惜昨稼,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拳锚。 院中可真熱鬧假栓,春花似錦、人聲如沸霍掺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杆烁。三九已至牙丽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間兔魂,已是汗流浹背烤芦。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留析校,地道東北人构罗。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓铜涉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親遂唧。 傳聞我的和親對象是個殘疾皇子芙代,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容

  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,160評論 2 33
  • 本文包括: 1、Linux 系統(tǒng)概述 2盖彭、Linux 用戶和用戶組管理 3链蕊、Linux 文件和目錄管理 4、Lin...
    廖少少閱讀 2,657評論 1 40
  • 第一講 Linux系統(tǒng)簡介 1.1.1 Linux系統(tǒng)簡介-UNIX發(fā)展歷史和發(fā)行版本1.1.2 Linux系統(tǒng)簡...
    陳走路Aston閱讀 843評論 0 1
  • 最近在兼職部分運維工作谬泌,之前沒怎么做過滔韵,對Linux不是那么的熟悉,這導(dǎo)致的主要問題是掌实,當(dāng)出現(xiàn)性能問題陪蜻,不知道看那...
    Ljian1992閱讀 1,000評論 0 8
  • 22:20. 躺床上例行思考一天的面對電腦的生活,有那么一些不對勁贱鼻。 向來是宴卖,開會時能不開口就閉嘴,對人面前要想好...
    厚堯閱讀 316評論 0 0