日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > shell 初識

shell 初識

來源:程序員人生   發(fā)布時間:2016-08-02 09:10:26 閱讀次數(shù):2556次

1.shell簡介

1.1 shell

Shell 是1個用C語言編寫的程序,它是用戶使用Linux的橋梁。Shell既是1種命令語言,又是1種程序設(shè)計語言。 Shell 是指1種利用程序,這個利用程序提供了1個界面,用戶通過這個界面訪問操作系統(tǒng)內(nèi)核的服務(wù)。

1.2 shell腳本

Shell 腳本(shell script),是1種為shell編寫的腳本程序。

1.3shell類型

bash csh dash ksh ....

2.shell入門

2.1編寫第1個shell腳本

test.sh: #!/bin/bash echo "Hello World !" 注: #!為1個約定的標(biāo)記,指定shell的相應(yīng)類型,用甚么解釋器履行

2.2履行腳本

1. #chmod +x test.sh #./test.sh 2. /bin/bash test.sh

3.shell 變量

3.1變量定義

var=val var="val" var='val' 循環(huán)賦值: for file in 'ls /etc' 規(guī)則: 1.變量定義時,不使用$符號; 2.變量名與等號之間不能有空格; 3.首個字符必須為字母(a-z,A-Z); 4.中間不能有空格,可使用下劃線(_); 5.不能使用標(biāo)點符號; 6.不能使用bash里的關(guān)鍵字(可用help命令查看保存關(guān)鍵字)。

3.2使用變量

var=val echo $var echo $(var)

3.3只讀變量

通過readonly關(guān)鍵字聲明: var=val readonly var

3.4刪除變量

通過unset關(guān)鍵字聲明: var=val unset var

3.5變量類型

環(huán)境變量: 所有的程序,包括shell啟動的程序,都能訪問環(huán)境變量,有些程序需要環(huán)境變量來保證其正常運行。必要的時候shell腳本也能夠定義環(huán)境變量。 局部變量:局部變量在腳本或命令中定義,僅在當(dāng)前shell實例中有效,其他shell啟動的程序不能訪問局部變量。 shell變量:shell變量是由shell程序設(shè)置的特殊變量。shell變量中有1部份是環(huán)境變量,有1部份是局部變量,這些變量保證了shell的正常運行

3.6shell字符串

1.字符串聲明: 單引號: str='string' 單引號里的任何字符都會原樣輸出,單引號字符串中的變量是無效的; 單引號字串中不能出現(xiàn)單引號(對單引號使用轉(zhuǎn)義符后也不行)。 雙引號: str="string" 雙引號里可以有變量; 雙引號里可以出現(xiàn)轉(zhuǎn)義字符 無引: str=string 2.拼接字符串: your_name="qinjx" greeting="hello, "$your_name" !" greeting_1="hello, ${your_name} !" echo $greeting $greeting_1 3.獲得字符串長度: string="abcd" echo ${#string} #輸出 4 4.提取子字符串: string="runoob is a great site" echo ${string:1:4} # 輸出 unoo 5.查找子字符串: string="runoob is a great company" echo `expr index "$string" is` # 輸出 8 注意: 以上腳本中 "`" 是反引號,而不是單引號 "'"

3.7shell數(shù)組

bash支持1維數(shù)組(不支持多維數(shù)組),并且沒有限定數(shù)組的大小。 1.定義數(shù)組 array=(val0 val1 val2 ...) array_name=( value0 value1 value2 value3 ) array_name[0]=value0 array_name[1]=value1 array_name[n]=valuen 2.讀取數(shù)組 ${array[index]} 通過"@"取得數(shù)組中的所有元素: echo ${array[@]} 3.獲得數(shù)組長度 獲得數(shù)組元素個數(shù): length=${#array[@]} length=${#array[*]} 取得單個數(shù)組元素的長度: length=${#array[n]}

3.8shell注釋

1."#"開頭行表示shell注釋行 2.shell無多行注釋操作,只能每行行頭添加"#"

4.Shell 傳遞參數(shù)

4.1傳遞參數(shù)使用

我們可以在履行 Shell 腳本時,向腳本傳遞參數(shù),腳本內(nèi)獲得參數(shù)的格式為:$n。n 代表1個數(shù)字,1 為履行腳本的第1個參數(shù),2 為履行腳本的第2個參數(shù),以此類推…… 例: test.sh: #!/bin/bash echo "Shell 傳遞參數(shù)實例!"; echo "履行的文件名:$0"; echo "第1個參數(shù)為:$1"; echo "第2個參數(shù)為:$2"; echo "第3個參數(shù)為:$3"; 效果: $ ./test.sh 1 2 3 Shell 傳遞參數(shù)實例! 履行的文件名:test.sh 第1個參數(shù)為:1 第2個參數(shù)為:2 第3個參數(shù)為:3

4.2特殊參數(shù)

$# 傳遞到腳本的參數(shù)個數(shù) $* 以1個單字符串顯示所有向腳本傳遞的參數(shù)。 如"$*"用「"」括起來的情況、以"$1 $2$n"的情勢輸出所有參數(shù)。 $$ 腳本運行確當(dāng)前進(jìn)程ID號 $! 后臺運行的最后1個進(jìn)程的ID號 $@ 與$*相同,但是使用時加引號,并在引號中返回每一個參數(shù)。 如"$@"用「"」括起來的情況、以"$1" "$2""$n" 的情勢輸出所有參數(shù)。 $- 顯示Shell使用確當(dāng)前選項,與set命令功能相同。 $? 顯示最后命令的退出狀態(tài)。0表示沒有毛病,其他任何值表明有毛病。 注: $* 與 $@ 區(qū)分: 相同點:都是援用所有參數(shù)。 不同點:只有在雙引號中體現(xiàn)出來。假定在腳本運行時寫了3個參數(shù) 123,,則 " * " 等價于 "1 2 3"(傳遞了1個參數(shù)),而 "@" 等價于 "1" "2" "3"(傳遞了3個參數(shù))。 例: test.sh: #!/bin/bash echo "-- \$* 演示 ---" for i in "$*"; do echo $i done echo "-- \$@ 演示 ---" for i in "$@"; do echo $i done 效果: $ ./test.sh 1 2 3 -- $* 演示 --- 1 2 3 -- $@ 演示 --- 1 2 3

5.shell基本運算符

原生bash不支持簡單的數(shù)學(xué)運算,但是可以通過其他命令來實現(xiàn),例如 awk 和 expr,expr 最經(jīng)常使用。 expr 是1款表達(dá)式計算工具,使用它能完成表達(dá)式的求值操作。 注意 1.使用的是反引號 ` 而不是單引號 '; 2.表達(dá)式和運算符之間要有空格,例如 2+2 是不對的,必須寫成 2 + 2,這與我們熟習(xí)的大多數(shù)編程語言不1樣。 例: test.sh: #!/bin/bash val=`expr 2 + 2` echo "兩數(shù)之和為 : $val"

5.1 算數(shù)運算符

運算符 說明 舉例
+ 加法 `expr $a + $b` 結(jié)果為 30。
- 減法 `expr $a - $b` 結(jié)果為 10。
* 乘法 `expr $a * $b` 結(jié)果為 200。
/ 除法 `expr $b / $a` 結(jié)果為 2。
% 取余 `expr $b % $a` 結(jié)果為 0。
= 賦值 a=$b 將把變量 b 的值賦給 a。
== 相等。用于比較兩個數(shù)字,相同則返回 true。 [ $a == $b ] 返回 false。
!= 不相等。用于比較兩個數(shù)字,不相同則返回 true。 [ $a != $b ] 返回 true。

5.2 關(guān)系運算符

關(guān)系運算符只支持?jǐn)?shù)字,不支持字符串,除非字符串的值是數(shù)字。

運算符 說明 返回值
-eq 檢測兩個數(shù)是不是相等,相等返回 true。 [ $a -eq $b ] 返回 false。
-ne 檢測兩個數(shù)是不是相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 檢測左側(cè)的數(shù)是不是大于右側(cè)的,如果是,則返回 true。 [ $a -gt $b ] 返回 false。
-lt 檢測左側(cè)的數(shù)是不是小于右側(cè)的,如果是,則返回 true。 [ $a -lt $b ] 返回 true。
-ge 檢測左側(cè)的數(shù)是不是大等于右側(cè)的,如果是,則返回 true。 [$a -ge $b ] 返回 false。
-le 檢測左側(cè)的數(shù)是不是小于等于右側(cè)的,如果是,則返回 true。 [ $a -le $b ] 返回 true。

5.3 布爾運算符

運算符 說明 舉例
! 非運算,表達(dá)式為 true 則返回 false,否則返回 true。 [ ! false ] 返回 true。
-o 或運算,有1個表達(dá)式為 true 則返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 與運算,兩個表達(dá)式都為 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

5.4 邏輯運算符

運算符 說明 舉例
&& 邏輯的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 邏輯的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

5.5 字符串運算符

運算符 說明 舉例
= 檢測兩個字符串是不是相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 檢測兩個字符串是不是相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 檢測字符串長度是不是為0,為0返回 true。 [ -z $a ] 返回 false。
-n 檢測字符串長度是不是為0,不為0返回 true。 [ -n $a ] 返回 true。
str 檢測字符串是不是為空,不為空返回 true。 [ $a ] 返回 true。

5.6 文件測試運算符

運算符 說明 舉例
-b file 檢測文件是不是是塊裝備文件,如果是,則返回 true。 [ -b $file ] 返回 false。
-c file 檢測文件是不是是字符裝備文件,如果是,則返回 true。 [ -c $file ] 返回 false。
-d file 檢測文件是不是是目錄,如果是,則返回 true。 [ -d $file ] 返回 false。
-f file 檢測文件是不是是普通文件(既不是目錄,也不是裝備文件),如果是,則返回 true。 [ -f $file ] 返回 true。
-g file 檢測文件是不是設(shè)置了 SGID 位,如果是,則返回 true。 [ -g $file ] 返回 false。
-k file 檢測文件是不是設(shè)置了粘著位(Sticky Bit),如果是,則返回 true。 [ -k $file ] 返回 false。
-p file 檢測文件是不是是具名管道,如果是,則返回 true。 [ -p $file ] 返回 false。
-u file 檢測文件是不是設(shè)置了 SUID 位,如果是,則返回 true。 [ -u $file ] 返回 false。
-r file 檢測文件是不是可讀,如果是,則返回 true。 [ -r $file ] 返回 true。
-w file 檢測文件是不是可寫,如果是,則返回 true。 [ -w $file ] 返回 true。
-x file 檢測文件是不是可履行,如果是,則返回 true。 [ -x $file ] 返回 true。
-s file 檢測文件是不是為空(文件大小是不是大于0),不為空返回 true。 [ -s $file ] 返回 true。
-e file 檢測文件(包括目錄)是不是存在,如果是,則返回 true。 [ -e $file ] 返回 true。

6.shell echo命令

6.1 顯示普通字符串

echo "It is a test" echo It is a test

6.2 顯示轉(zhuǎn)義字符

echo "\"It is a test\""

6.3 顯示變量

#!/bin/sh read name echo "$name It is a test"

6.4 顯示換行

echo -e "OK! \n" # -e 開啟轉(zhuǎn)義 echo "It it a test"

6.5 顯示不換行

#!/bin/sh echo -e "OK! \c" # -e 開啟轉(zhuǎn)義 \c 不換行 echo "It is a test"

6.6 顯示結(jié)果定向至文件

echo "It is a test" > myfile

6.7 原樣輸出字符串,不進(jìn)行轉(zhuǎn)義或取變量(用單引號)

echo '$name\"'

6.8 顯示命令履行結(jié)果

echo `date` 注意是反引號,適用于履行相干命令。

7. shell printf命令

1.printf語法 printf format-string [arguments ...] 例: test.sh: #!/bin/bash printf "%⑴0s %⑻s %⑷s\n" 姓名 性別 體重kg printf "%⑴0s %⑻s %⑷.2f\n" 郭靖 男 66.1234 printf "%⑴0s %⑻s %⑷.2f\n" 楊過 男 48.6543 printf "%⑴0s %⑻s %⑷.2f\n" 郭芙 女 47.9876 格式符使用同C語言的printf函數(shù)。

7. shell test命令

Shell中的 test 命令用于檢查某個條件是不是成立,它可以進(jìn)行數(shù)值、字符和文件3個方面的測試。

7.1 數(shù)值測試

參數(shù) 說明
-eq 等于則為真
-ne 不等于則為真
-gt 大于則為真
-ge 大于等于則為真
-lt 小于則為真
-le 小于等于則為真

7.2 字符串測試

參數(shù) 說明
= 等于則為真
!= 不相等則為真
-z 字符串 字符串的長度為零則為真
-n 字符串 字符串的長度不為零則為真

7.3 文件測試

參數(shù) 說明
-e 文件名 如果文件存在則為真
-r 文件名 如果文件存在且可讀則為真
-w 文件名 如果文件存在且可寫則為真
-x 文件名 如果文件存在且可履行則為真
-s 文件名 如果文件存在且最少有1個字符則為真
-d 文件名 如果文件存在且為目錄則為真
-f 文件名 如果文件存在且為普通文件則為真
-c 文件名 如果文件存在且為字符型特殊文件則為真
-b 文件名 如果文件存在且為塊特殊文件則為真
另外,Shell還提供了與( -a )、或( -o )、非( ! )3個邏輯操作符用于將測試條件連接起來,其優(yōu)先級為:"!"最高,"-a"次之,"-o"最低。例如: #!/bin/bash cd /bin if test -e ./notFile -o -e ./bash then echo '有1個文件存在!' else echo '兩個文件都不存在' fi

8.流程控制

8.1if else

1. if condition then command1 command2 ... commandN fi 2. if condition then command1 command2 ... commandN else command fi 3. if condition1 then command1 elif condition2 then command2 else commandN fi

8.2for

1. for var in item1 item2 ... itemN do command1 command2 ... commandN done 無窮循環(huán): for (( ; ; )) do commands done

8.3while

1. while condition do command done 無窮循環(huán): 1. while : do command done 2. while true do command done

8.4case

1. case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac

8.5until

1. until condition do command done

8.6 跳出循環(huán)

1.break:適用于所有循環(huán),并且跳出所有循環(huán) 2.continue:適用于所有循環(huán),跳出當(dāng)前循環(huán) 3.esca:僅用于case循環(huán)中

9.shell函數(shù)

9.1 shell函數(shù)定義

[ function ] funname [()] { action; [return int;] } 說明: 1、可以帶function fun() 定義,也能夠直接fun() 定義,不帶任何參數(shù)。 2、參數(shù)返回,可以顯示加:return 返回,如果不加,將以最后1條命令運行結(jié)果,作為返回值。 return后跟數(shù)值n(0-255)

9.2 shell 函數(shù)參數(shù)

1. 在shell函數(shù)體內(nèi)部,通過 $n 的情勢來獲得參數(shù)的值,例如,$1表示第1個參數(shù),$2表示第2個參數(shù)... 例: test.sh: #!/bin/bash funWithParam(){ echo "第1個參數(shù)為 $1 !" echo "第2個參數(shù)為 $2 !" echo "第10個參數(shù)為 $10 !" echo "第10個參數(shù)為 ${10} !" echo "第101個參數(shù)為 ${11} !" echo "參數(shù)總數(shù)有 $# 個!" echo "作為1個字符串輸出所有參數(shù) $* !" } funWithParam 1 2 3 4 5 6 7 8 9 34 73 效果: 第1個參數(shù)為 1 ! 第2個參數(shù)為 2 ! 第10個參數(shù)為 10 ! 第10個參數(shù)為 34 ! 第101個參數(shù)為 73 ! 參數(shù)總數(shù)有 11 個! 作為1個字符串輸出所有參數(shù) 1 2 3 4 5 6 7 8 9 34 73 ! 注意: $10 不能獲得第10個參數(shù),獲得第10個參數(shù)需要${10}。當(dāng)n>=10時,需要使用${n}來獲得參數(shù)。 2.特殊參數(shù) 同shell腳本傳參相同,請回顧該小節(jié)。

10.Shell 輸入/輸出重定向

10.1重定向命令表

命令 說明
command > file 將輸出重定向到 file。
command < file 將輸入重定向到 file。
command >> file 將輸出以追加的方式重定向到 file。
n > file 將文件描寫符為 n 的文件重定向到 file。
n >> file 將文件描寫符為 n 的文件以追加的方式重定向到 file。
n >& m 將輸出文件 m 和 n 合并。
n <& m 將輸入文件 m 和 n 合并。
<< tag 將開始標(biāo)記 tag 和結(jié)束標(biāo)記 tag 之間的內(nèi)容作為輸入。

10.2 Here Document

Here Document 是 Shell 中的1種特殊的重定向方式,用來將輸入重定向到1個交互式 Shell 腳本或程序。它的作用是將兩個 delimiter 之間的內(nèi)容(document) 作為輸入傳遞給 command。 它的基本的情勢以下: command << delimiter document delimiter 注意: 1.結(jié)尾的delimiter 1定要頂格寫,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 縮進(jìn)。 2.開始的delimiter前后的空格會被疏忽掉。 例: test.sh: #!/bin/bash cat << EOF welcome feison`s blog! EOF 效果: welcome feison`s blog!

11.shell文件包括

1.Shell 也能夠包括外部腳本。這樣可以很方便的封裝1些公用的代碼作為1個獨立的文件。 2.文件包括語法格式: . filename # 注意點號(.)和文件名中間有1空格source filename 注意: 被包括的文件 test1.sh 不需要可履行權(quán)限。

12.寫在后面

本文是學(xué)習(xí)[菜鳥教程shell](http://www.runoob.com/linux/linux-shell.html)的筆記,記錄的是本人在shell方面的薄弱點,主要是打基礎(chǔ),方便以后回顧,編寫的不夠深入和全面,大家如有不同看法可以留言評論,相互交換學(xué)習(xí)。
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 久久av网 | 欧美1区2区3区 | 亚洲精品在| 3344成人免费高清免费视频 | 欧美二三区 | 嫩草影院2019 | 亚洲免费在线看 | 久久九九免费视频 | 国产精品国产三级国产aⅴ入口 | 黄色三级在线 | 日韩激情视频 | 日韩一区二区精品 | 最近的中文字幕在线看视频 | 一级毛片在线播放 | 中国大陆高清aⅴ毛片 | 亚洲成人av电影 | 国产高清中文字幕 | 日韩久| 国产亚洲高清视频 | 久热中文字幕 | 欧美不卡激情三级在线观看 | 亚洲人久久 | 欧美精品在线视频 | 欧美日韩电影一区二区三区 | 久久久久高清 | 日韩一二三| 免费视频三区 | 欧美一级网址 | 牛牛在线视频 | 亚洲性猛交xxxx乱大交 | 中文字幕91在线 | 狠狠干狠狠操 | 国产一区二区在线视频观看 | 黄色大片在线免费看 | 国产精品久久久久久久久久白浆 | 国产乱码精品一区二区三区不卡 | 高清国产一区二区 | 久久精品一区二区三区不卡牛牛 | www.久久99| 日本暖暖在线视频 | 中文字幕超碰在线 |