操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    第一步:ESC 進(jìn)入命令行模式

    第二步:: 進(jìn)入底行模式

    第三步:q! 撤銷本次修改并退出編輯

    【vi編輯器的3種模式】

    基本上vi可以分為三種狀態(tài),分別是命令模式( mode)、插入模式( mode)和底行模式(last line mode),各模式的功能區(qū)分如下:

    1. 命令行模式 mode)

    控制屏幕光標(biāo)的移動(dòng),字符、字或行的刪除,查找,移動(dòng)復(fù)制某區(qū)段及進(jìn)入 mode下,或者到 last line mode。

    命令行模式下的常用命令:

    移動(dòng)光標(biāo)

    復(fù)制/粘貼

    剪切/刪除,剪切與刪除都是dd

    撤銷/恢復(fù)

    2. 編輯模式( mode)

    只有在 mode下,才可以做文字輸入,按「ESC」鍵可回到命令行模式。

    編輯模式下常用命令:

    ESC 退出編輯模式到命令行模式; 3. 底行模式(last line mode)

    將文件保存或退出vi,也可以設(shè)置編輯環(huán)境,如尋找字符串、列出行號(hào)……等。

    底行模式下常用命令:

    保存/退出

    查找/搜索

    文件內(nèi)容的替換

    顯示行號(hào)

    :set nu
    【nu = number】,行號(hào)
    取消行號(hào) => :set nonu
    

    3. shell編程

    shell編程原文連接

    3.1 shell簡(jiǎn)介 3.1.1 運(yùn)行shell腳本

    shell腳本test.sh

    #!/bin/bash
    echo "Hello World"
    

    1. 作為可執(zhí)行程序運(yùn)行

    chmod +x test.sh	# 賦予可執(zhí)行權(quán)限
    ./test.sh		    # 執(zhí)行程序
    

    2. 作為解釋器參數(shù)運(yùn)行

    /bin/sh test.sh		# 執(zhí)行命令
    /bin/php test.php	# 執(zhí)行命令
    

    3.1.2 shell注釋

    單行注釋 #

    # 這是一個(gè)注釋
    # author:ohuohuoo
    # date:`date`
    

    多行注釋

    :<

    3.1.3 shell編寫(xiě)的基本步驟 建立shell文件賦予shell文件可執(zhí)行程序權(quán)限(使用chmod命令修改權(quán)限)執(zhí)行shell文件(直接運(yùn)行賦予權(quán)限后的二進(jìn)制文件) 3.2 shell變量 3.2.1 定義變量

    shell編程中,定義變量是直接定義的,沒(méi)有明確的數(shù)據(jù)類型,shel允許用戶建立變量存儲(chǔ)數(shù)據(jù),但是將認(rèn)為賦給變量的值都解釋為一串字符,如下

    cout=1			# 定義變量		
    name="ohuohuo"	 # 定義變量
    echo $cout		 # 取變量值
    echo $name	     # 取變量值
    

    shell變量命名規(guī)則:

    在變量中使用系統(tǒng)命令,需要加上 " `"符號(hào)(ESC鍵下方),如下所示

    DATE1=`date`	
    DATE2=$(date)
    

    3.2.2 使用變量

    使用變量的時(shí),用英文符號(hào)"$"取變量值,對(duì)于較長(zhǎng)的變量名,建議加上{ }花括號(hào),幫助解釋器識(shí)別變量的邊界,如下

    name="test_name"
    echo "My name is ${name}and you?"
    

    已經(jīng)定義過(guò)的變量,可以二次定義并重新被賦值覆蓋上一次的變量值

    3.2.3 變量類型

    運(yùn)行shell時(shí)會(huì)同時(shí)存在三種變量

    局部變量:在腳本或命令中定義,僅在當(dāng)前shell實(shí)例中有效,其他shell啟動(dòng)的程序不能訪問(wèn)局部變量

    環(huán)境變量:所有的程序,包括shell啟動(dòng)的程序,都能訪問(wèn)環(huán)境變量,必要的時(shí)候shell腳本也可以定義環(huán)境變量

    shell變量:由shell程序設(shè)置的特殊變量。shell變量中有一部分是環(huán)境變量,有一部分是局部變量,不同類型的變量保證了shell的正常運(yùn)行

    3.2.4 變量操作

    shell中的變量,默認(rèn)為可讀可寫(xiě)類型,如果想要其只可讀,如同url一樣,需要將其聲明為只讀類型變量(如同const),使用命令,如下腳本

    #!/bin/bash
    Url="http://www.baidu.com"
    readonly Url
    

    如果想要?jiǎng)h除變量,使用unset命令解除命令賦值,但是unset不能刪除可讀變量,如下所示

    #!/bin/sh
    name="ohuohuo"
    Url="http://www.baidu.com"
    readonly Url	# 設(shè)置可讀變量
    unset name		# 可以被刪除
    unset Url		# 不可被刪除
    echo $name		# 不被打印出
    echo $Url		# 打印出
    

    3.3 shell字符串 3.3.1 字符串類型

    在shell中字符串是shell編程中最常用最有用的數(shù)據(jù)類型,字符串可以用單引號(hào),也可以用雙引號(hào),也可以不用引號(hào)。

    使用單引號(hào)

    str='this is a string'
    

    使用單引號(hào)的不足:

    使用雙引號(hào)

    name="ohouhuoo"
    str="please input your \"$name"\"
    echo -e $str
    

    使用雙引號(hào)的優(yōu)勢(shì):

    由此可見(jiàn),雙引號(hào)較單引號(hào)而言有更強(qiáng)大的優(yōu)勢(shì)

    3.3.2 字符串操作

    提取子字符串:使用字符串的截取命令,用于提取部分字符串

    string="this is a test"
    echo ${string:2:6} # 表示從第3個(gè)字符開(kāi)始截取
    

    上式輸出結(jié)果為is is

    查找字符串:用于查找字符的位置,輸出結(jié)果為字符在字符串中所占的數(shù)據(jù)位置,如果查找多個(gè)字符,那哪個(gè)字母先出現(xiàn)就計(jì)算哪個(gè),如下查找it中i和t兩個(gè)字符,t先出現(xiàn),輸出為1

    string="this is a test"
    echo `expr index "$string" it`  # 輸出 1
    

    3.4 shell數(shù)組

    在bash下,僅僅支持一維數(shù)組,并且沒(méi)有限定數(shù)組的大小,不支持多維數(shù)組。類似于 C 語(yǔ)言,數(shù)組元素的下標(biāo)由 0 開(kāi)始編號(hào)(上述字符串也是這樣)。獲取數(shù)組中的元素要利用下標(biāo),下標(biāo)可以是整數(shù)或算術(shù)表達(dá)式,其值應(yīng)大于或等于 0。

    3.4.1 定義數(shù)組

    # 一般定義
    array_name=(value1 value2 value3 value4)
    # 多級(jí)定義
    array_test=(
    value1 
    value2 
    value3 
    value4
    )
    # 
    array_text[0]=value0
    array_text[1]=value1
    array_text[3]=value3
    ... 
    ...
    

    三種定義形式均可

    3.4.2 數(shù)組操作

    讀取數(shù)組:和讀取變量名相同,使用$符號(hào),需要加上下標(biāo)名

    valuen=${array_name[n]}
    echo ${array_name[@]} # 讀取所有
    

    獲取數(shù)組長(zhǎng)度:獲取數(shù)組長(zhǎng)度的方法與獲取字符串長(zhǎng)度的方法相同,如所示

    # 取得數(shù)組元素的個(gè)數(shù)
    length=${#array_name[@]}	# 從頭到尾取
    # 或者
    length=${#array_name[*]}	# 取所有
    # 取得數(shù)組單個(gè)元素的長(zhǎng)度
    lengthn=${#array_name[n]}	# 取特定
    

    3.5 shell傳遞參數(shù)

    在執(zhí)行 Shell 腳本時(shí),向腳本傳遞參數(shù),腳本內(nèi)獲取參數(shù)的格式為:$n。n 代表一個(gè)數(shù)字,1 為執(zhí)行腳本的第一個(gè)參數(shù),2 為執(zhí)行腳本的第二個(gè)參數(shù),以此類推……,腳本編寫(xiě)如下,保存為test.sh

    echo "傳遞參數(shù)實(shí)例!";
    echo "執(zhí)行的文件名:$0";
    echo "第一個(gè)參數(shù)為:$1";
    echo "第二個(gè)參數(shù)為:$2";
    echo "第三個(gè)參數(shù)為:$3";
    

    執(zhí)行腳本如下

    chmod +x test.sh
    ./test.sh 1 2 3
    

    結(jié)果

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img--61)(/Users/uru// /-user-/image-.png)]

    在使用shell傳遞參數(shù)的時(shí)候,常常需要用到以下的幾個(gè)字符來(lái)處理參數(shù)

    參數(shù)處理說(shuō)明

    $#

    傳遞到腳本的參數(shù)個(gè)數(shù)

    $*

    以一個(gè)單字符串顯示所有向腳本傳遞的參數(shù)。 如的形式輸出所有參數(shù)。

    $$

    腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào)

    $!

    后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的ID號(hào)

    $@

    與? 相 同 , 但 是 使 用 時(shí) 加 引 號(hào) , 并 在 引 號(hào) 中 返 回 每 個(gè) 參 數(shù) 。 如 " *相同,但是使用時(shí)加引號(hào),并在引號(hào)中返回每個(gè)參數(shù)。 如"?相同,但是使用時(shí)加引號(hào),并在引號(hào)中返回每個(gè)參數(shù)。如"@“用「”」括起來(lái)的情況、以"$1" “2 " … " 2" … “2”…"n” 的形式輸出所有參數(shù)。

    $-

    顯示Shell使用的當(dāng)前選項(xiàng),與set命令功能相同。

    顯示最后命令的退出狀態(tài)。0表示沒(méi)有錯(cuò)誤,其他任何值表明有錯(cuò)誤

    echo "傳遞參數(shù)實(shí)例!";
    echo "第一個(gè)參數(shù)為:$1";
    echo "參數(shù)個(gè)數(shù)為:$#";
    echo "傳遞的參數(shù)作為一個(gè)字符串顯示:$*";
    

    結(jié)果

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img--62)(/Users/uru// /-user-/image-.png)]

    ? 其實(shí)就是一個(gè)輸出參數(shù)的過(guò)程

    3.6 shell運(yùn)算符 3.6.1 shell運(yùn)算符種類

    shell想要使用這些運(yùn)算符,需要結(jié)合其他命令和工具來(lái)使用(因?yàn)閟hell中不支持簡(jiǎn)單的數(shù)學(xué)運(yùn)算),如使用算符運(yùn)算符就需要搭配的常用的工具有兩種

    運(yùn)算規(guī)則注意點(diǎn):

    實(shí)例

    #!/bin/bash
    val=`expr 3 + 2`
    echo "兩數(shù)之和為 : $val"
    

    3.6.2 算數(shù)運(yùn)算符

    shell支持的常用的如下表,舉例中這里假定變量 a 為 10,變量 b 為 20

    運(yùn)算符說(shuō)明舉例

    +

    加法

    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。

    ==

    相等。用于比較兩個(gè)數(shù)字,相同則返回 true。

    [ $a == $b ] 返回 false。

    !=

    不相等。用于比較兩個(gè)數(shù)字,不相同則返回 true。

    [ $a != $b ] 返回 true。

    3.6.3 關(guān)系運(yùn)算符

    shell中的關(guān)系運(yùn)算符和其他編程語(yǔ)言不同,shell中使用特殊的字符表示關(guān)系運(yùn)算符,并且只支持?jǐn)?shù)字,不支持字符串,除非字符串是數(shù)字,下表為常用關(guān)系運(yùn)算符,同樣指定a為10,b為20

    運(yùn)算符說(shuō)明舉例

    -eq

    檢測(cè)兩個(gè)數(shù)是否相等,相等返回 true。

    [ $a -eq $b ] 返回 false。

    -ne

    檢測(cè)兩個(gè)數(shù)是否不相等,不相等返回 true。

    [$a -ne $b ] 返回 true。

    -gt

    檢測(cè)左邊的數(shù)是否大于右邊的,如果是,則返回 true。

    [ $a -gt $b ] 返回 false。

    -lt

    檢測(cè)左邊的數(shù)是否小于右邊的,如果是,則返回 true。

    [ $a -lt $b ] 返回 true。

    -ge

    檢測(cè)左邊的數(shù)是否大于等于右邊的,如果是,則返回 true。

    [ $a -ge $b ] 返回 false

    -le

    檢測(cè)左邊的數(shù)是否小于等于右邊的,如果是,則返回 true。

    [ $a -le $b ] 返回 true。

    #!/bin/bash
    a=10
    b=20
    if [ $a -eq $b ]
    then
       echo "$a -eq $b : a 等于 b"
    else
       echo "$a -eq $b: a 不等于 b"
    fi
    if [ $a -ne $b ]
    then
       echo "$a -ne $b: a 不等于 b"
    else
       echo "$a -ne $b : a 等于 b"
    fi 
    

    需要注意的點(diǎn):

    運(yùn)算符和數(shù)之間必須要用空格隔開(kāi)

    3.6.4 布爾運(yùn)算符

    shell中的布爾運(yùn)算符使用如下表,同樣指定a為10,b為20

    運(yùn)算符說(shuō)明舉例

    !

    非運(yùn)算,表達(dá)式為true則返回false,否則返回true

    [ ! false ] 返回 true

    -o

    或運(yùn)算,有一個(gè)表達(dá)式為true則返回true

    [ $a -lt 20 -o $b -gt 100 ] 返回 true。

    -a

    與運(yùn)算,兩個(gè)表達(dá)式都為true才返回true

    [ $a -lt 20 -a $b -gt 100 ] 返回 false

    #!/bin/bash
    a=10
    b=20
    if [ $a != $b ]
    then
       echo "$a != $b : a 不等于 b"
    else
       echo "$a == $b: a 等于 b"
    fi 
    

    3.6.5 邏輯運(yùn)算符 運(yùn)算符說(shuō)明舉例

    &&

    邏輯的AND

    [[ $a -lt 100 && $b -gt 100 ]] 返回 false

    ||

    邏輯的OR

    [[$a -lt 100 || $b -gt 100]]返回true

    #!/bin/bash
    a=10
    b=20
    if [[ $a -lt 100 && $b -gt 100 ]]
    then
       echo "返回 true"
    else
       echo "返回 false"
    fi 
    

    需要注意的點(diǎn):

    這里使用兩層的[ ]符號(hào),將兩次關(guān)系運(yùn)算的結(jié)果保存在條件句中

    3.6.6 字符串運(yùn)算符

    shell中常用的字符串運(yùn)算符如下表。假定變量 a 為 “abc”,變量 b 為 “efg”

    運(yùn)算符說(shuō)明舉例

    =

    檢測(cè)兩個(gè)字符串是否相等,相等返回true

    [ $a = $b ] 返回 false

    !=

    檢測(cè)兩個(gè)字符串是否相等,不相等返回true

    [ $a != $b ] 返回 true。

    -z

    檢測(cè)字符串長(zhǎng)度是否為0,為0返回true

    [ -z $a ] 返回 false。

    -n

    檢測(cè)字符串長(zhǎng)度是否為0,不為0返回true

    [ -n “$a” ] 返回 true

    $

    檢測(cè)字符串是否為空,不為空返回true

    [ $a ] 返回 true

    #!/bin/bash
    a="abc"
    b="efg"
    if [ $a != $b ]
    then
       echo "$a != $b : a 等于 b"
    else
       echo "$a != $b: a 不等于 b"
    fi 
    

    3.6.7 文件測(cè)試運(yùn)算符

    shell中的文件測(cè)試運(yùn)算符用于檢測(cè)在類unix系統(tǒng)中,文件的各種屬性,如下表

    運(yùn)算符說(shuō)明舉例

    -b file

    檢測(cè)文件是否是塊設(shè)備文件,如果是,則返回 true。

    [ -b $file ] 返回 false。

    -c file

    檢測(cè)文件是否是字符設(shè)備文件,如果是,則返回 true。

    [ -c $file ] 返回 false。

    -d file

    檢測(cè)文件是否是目錄,如果是,則返回 true。

    [ -d $file ] 返回 false。

    -f file

    檢測(cè)文件是否是普通文件(既不是目錄,也不是設(shè)備文件),如果是,則返回 true

    [ -f $file ] 返回 true。

    -g file

    檢測(cè)文件是否設(shè)置了 SGID 位,如果是,則返回 true

    [ -g $file ] 返回 false。

    -k file

    檢測(cè)文件是否設(shè)置了粘著位( Bit),如果是,則返回 true

    [ -k $file ] 返回 false。

    -p file

    檢測(cè)文件是否是有名管道,如果是,則返回 true

    [ -p $file ] 返回 false。

    -u file

    檢測(cè)文件是否設(shè)置了 SUID 位,如果是,則返回 true

    [ -u $file ] 返回 false。

    -r file

    檢測(cè)文件是否可讀,如果是,則返回 true

    [ -r $file ] 返回 true。

    -w file

    檢測(cè)文件是否可寫(xiě),如果是,則返回 true

    [ -w $file ] 返回 true

    -x file

    檢測(cè)文件是否可執(zhí)行,如果是,則返回 true

    [ -x $file ] 返回 true。

    -s file

    檢測(cè)文件是否為空(文件大小是否大于0),不為空返回 true

    [ -s $file ] 返回 true。

    -e file

    檢測(cè)文件(包括目錄)是否存在,如果是,則返回 true

    [ -e $file ] 返回 true。

    #!/bin/bash
    file="/var/www/test/test.sh"
    if [ -r $file ]
    then
       echo "文件可讀"
    else
       echo "文件不可讀"
    fi    
    

    3.7 shell編程中的命令 3.7.1 echo命令

    echo命令在shell中用于字符串的輸出,調(diào)用的格式:

    echo string
    

    echo命令還可顯示復(fù)雜的輸出格式

    顯示普通的字符串

    echo "this is a test"
    

    顯示轉(zhuǎn)義字符

    echo "\this is a test\"
    

    顯示變量

    name="ohuohuo"
    echo "you name is $name"
    

    顯示換行

    echo -e "Right!\n " # -e 表示開(kāi)啟轉(zhuǎn)義
    echo "this is other line"
    

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

    echo "this is a test" > testfile
    

    顯示命令執(zhí)行結(jié)果

    echo `date`
    

    3.7.2 命令

    shell中的命令如同C語(yǔ)言中一樣,調(diào)用格式也大抵相同,只是有一點(diǎn)點(diǎn)不同。與echo命令打印字符串不同的是,不會(huì)自動(dòng)調(diào)價(jià)換行符號(hào),可以手動(dòng)添加

    命令的語(yǔ)法:

    printf format-string [arguments...]
    

    參數(shù)說(shuō)明:

    舉例如下

    $ echo "Hello, Shell"	# 輸入
    Hello, Shell		   # 輸出
    $ printf "Hello, Shell\n" # 輸入
    Hello, Shell			# 輸出
    

    命令可以較為強(qiáng)大的使用轉(zhuǎn)義字符,shell中常用的轉(zhuǎn)義字符如下表示所示

    序列說(shuō)明

    \a

    警告字符,通常為ASCII的BEL字符

    \b

    后退

    \c

    抑制(不顯示)輸出結(jié)果中任何結(jié)尾的換行字符(只在%b格式指示符控制下的參數(shù)字符串中有效),而且,任何留在參數(shù)里的字符、任何接下來(lái)的參數(shù)以及任何留在格式字符串中的字符,都被忽略

    \f

    換頁(yè)()

    \n

    換行

    \r

    回車( )

    \t

    水平制表符

    \v

    垂直制表符

    \

    一個(gè)字面上的反斜杠字符

    \ddd

    表示1到3位數(shù)八進(jìn)制值的字符。僅在格式字符串中有效

    \0ddd

    表示1到3位的八進(jìn)制值字符

    3.7.4 test命令

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

    數(shù)值測(cè)試命令表

    參數(shù)說(shuō)明

    -eq

    等于則為真

    -ne

    不等于則為真

    -gt

    大于則為真

    -ge

    大于等于則為真

    -lt

    小于則為真

    -le

    小于等于則為真

    #!/bin/bash
    num1=100
    num2=100
    if test $[num1] -eq $[num2]
    then
        echo '兩個(gè)數(shù)相等!'
    else
        echo '兩個(gè)數(shù)不相等!'
    fi
    

    字符串測(cè)試表

    參數(shù)說(shuō)明

    =

    等于則為真

    !=

    不相等則為真

    -z 字符串

    字符串長(zhǎng)度為0則為真

    -n 字符串

    字符串長(zhǎng)度不為0則為真

    # !/bin/bas
    num1="name"
    num2="function"
    if test $num1 = $num2
    then
        echo '兩個(gè)字符串相等!'
    else
        echo '兩個(gè)字符串不相等!'
    fi
    

    文件測(cè)試表

    參數(shù)說(shuō)明

    -e 文件名

    如果文件存在則為真

    -r 文件名

    如果文件存在且可讀則為真

    -w 文件名

    如果文件存在且可寫(xiě)則為真

    -x 文件名

    如果文件存在且可執(zhí)行則為真

    -s 文件名

    如果文件存在且至少有一個(gè)字符則為真

    -d 文件名

    如果文件存在且為目錄則為真

    -f 文件名

    如果文件存在且為普通文件則為真

    -c 文件名

    如果文件存在且為字符型特殊文件則為真

    -b 文件名

    如果文件存在且為塊特殊文件則為真

    # !/bin/bash
    if test -e ./bash
    then
        echo '文件已存在!'
    else
        echo '文件不存在!'
    fi
    

    3.8 shell流程控制

    shell中的流程控制主要由條件、循環(huán)組成

    3.8.1 if- else條件控制語(yǔ)句

    if - then - fi

    調(diào)用格式:

    if condition
    then
        command1 
        command2
        ...
        commandN 
    fi
    # 寫(xiě)成單行
    if condition;then command1; command2;fi
    

    刪除光標(biāo)所在位置到行末的所有字符_ie 報(bào)錯(cuò) 行1 字符 1 代碼問(wèn)題_字符串實(shí)現(xiàn)簡(jiǎn)單的行編輯器

    如果存在不滿足的條件的情況

    if condition
    then
        command1 
        command2
        ...
        commandN
    else
        command
    fi
    

    在多層嵌套條件情況

    if condition1
    then
        command1
    elif condition2 
    then 
        command2
    else
        commandN
    fi
    

    num1=$[6]
    num2=$[8]
    if test $[num1] -eq $[num2]
    then
        echo '兩個(gè)數(shù)字相等!'
    else
        echo '兩個(gè)數(shù)字不相等!'
    fi
    

    3.8.2 case條件

    shell中case語(yǔ)句為多功能選擇語(yǔ)句字符串實(shí)現(xiàn)簡(jiǎn)單的行編輯器,與其他語(yǔ)言相通的是,可以用case語(yǔ)句匹配一個(gè)值與一個(gè)模式,如果匹配成功,執(zhí)行相匹配的命令。case語(yǔ)句調(diào)用格式如下:

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

    需要注意的點(diǎn):

    echo '輸入 1 到 4 之間的數(shù)字:'
    echo '你輸入的數(shù)字為:'
    read num
    case $num in
        1)  echo '你選擇了 1'
        ;;
        2)  echo '你選擇了 2'
        ;;
        3)  echo '你選擇了 3'
        ;;
        4)  echo '你選擇了 4'
        ;;
        *)  echo '你沒(méi)有輸入 1 到 4 之間的數(shù)字'
        ;;
    esac
    

    case中想要跳出循環(huán)有兩個(gè)命令:break和

    break命令允許跳出所有循環(huán)(終止執(zhí)行后面的所有循環(huán))

    命令與break命令類似,只有一點(diǎn)差別,它不會(huì)跳出所有循環(huán),僅僅跳出當(dāng)前循環(huán)。

    3.8.3 for循環(huán)

    for var in item1 item2 ... itemN
    do
        command1
        command2
        ...
        commandN
    done
    # 寫(xiě)成一行同樣使用分號(hào)將語(yǔ)句分開(kāi) 
    

    for num in 1 2 3 4 5
    do
        echo "The value is: $num"
    done
    

    3.8.4 while循環(huán)

    while condition
    do
        command
    done
    

    #!/bin/bash
    num=1
    while(( $num<=5 ))
    do
        echo $num
        let "num++"
    done
    

    3.9 shell函數(shù) 3.9.1 定義函數(shù)

    linux中的shell同樣可以定義函數(shù),然后在函數(shù)中調(diào)用執(zhí)行相關(guān)的shell命令,完成功能,shell中的函數(shù)調(diào)用格式如下:

    [ function ] funname [()]
    {
        action;
        [return int;]
    }
    

    參數(shù)說(shuō)明:

    fun () 表示有返回參數(shù)的函數(shù)(如同C語(yǔ)言中的有返回類型的函數(shù)(int,char等))fun() 表示無(wú)返回參數(shù)的函數(shù)(類似于C語(yǔ)言中的void類型函數(shù))使用可以返回參數(shù)值(一般為數(shù)值n),如果不使用,將默認(rèn)以最后一條命令運(yùn)行的結(jié)果作為返回值

    #!/bin/bash
    FunReturn(){
        echo "兩個(gè)數(shù)字進(jìn)行相加運(yùn)算..."
        echo "輸入第一個(gè)數(shù)字: "
        read num
        echo "輸入第二個(gè)數(shù)字: "
        read anothernum
        echo "兩個(gè)數(shù)字分別為 $num 和 $anothernum !"
        return $(($num+$anothernum))	# 分別返回?cái)?shù)值
    }
    FunReturn		# 調(diào)用函數(shù)
    echo "輸入的兩個(gè)數(shù)字之和為 $? !" # 使用通配符獲取上一條指令的返回值
    

    所有的函數(shù)在使用前必須定義,這是因?yàn)閟hell解釋器是順序逐層執(zhí)行的,當(dāng)shell解釋器發(fā)現(xiàn)定義的函數(shù)時(shí),才會(huì)找到其對(duì)應(yīng)的功能,進(jìn)而執(zhí)行

    3.9.2 參數(shù)定義

    此外想要使用shell函數(shù)傳遞參數(shù)時(shí),需要在函數(shù)體的內(nèi)部,通過(guò) $n 的形式來(lái)獲取參數(shù)的值,與其他語(yǔ)言不同的是,這不是在定義函數(shù)的時(shí)候就給定參數(shù),而是在函數(shù)體中獲取到的參數(shù),例如,$1表示第一個(gè)參數(shù),$2表示第二個(gè)參數(shù),參數(shù)調(diào)用列表如下

    參數(shù)處理說(shuō)明

    $#

    傳遞到腳本或者函數(shù)的參數(shù)個(gè)數(shù)

    $*

    以一個(gè)單字符串顯示所有向腳本傳遞的參數(shù)

    $$

    腳本運(yùn)行時(shí)的當(dāng)前進(jìn)程ID號(hào)

    $!

    后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的ID號(hào)

    $@

    與$*相同,但是加引號(hào),并在引號(hào)中返回每個(gè)參數(shù)

    $-

    顯示shell使用的當(dāng)前選項(xiàng),與set命令功能相同

    顯示最后命令退出的狀態(tài)。0表示沒(méi)有錯(cuò)誤,其他任何之表明錯(cuò)誤

    shell編程實(shí)例

    來(lái)自實(shí)驗(yàn)報(bào)告五

    if分支

    1、 判斷輸入文件的屬性

    #!/bin/bash
    clear
    echo "input a file or directory name ,pls"
    read path_name
    if [ -d $path_name ] ##after [ should have space and before ] should have space 
    then
    	echo " $path_name is a directory"
    elif [ -f $path_name ]
    then
    	echo "$path_name is a regular file"
    	if [ -r $path_name ]
    	then
    		echo "$path_name is a readable file"
    	fi
    	if [ -w $path_name ]
    	then
    		echo " $path_name is a writeable file"
    	fi
    	if [ -x $path_name ]
    	then
    		echo " $path_name is a executeable file"
    	fi
    else
    	echo "this script cannot get the file/directory( $path_name)information ! "
    fi
    

    2、 以shell命令的返回值作為判斷條件

    # !/bin/bash
    echo "input a directory"
    read dir_name
    if cd $dir_name > /dev/ null 2>&1
    then
    echo "enter directory : $dir_name succeed"
    else
    echo "enter directory: $dir_name failed"
    fi
    

    case分支

    1、 根據(jù)選擇的模式,打印不同的回答

    # !/bin/bash
    clear
    echo "Do you like Linux?"
    read like_it
    case $like_it in
    y | Y | yes | Yes)
    	echo "Linux is a good friend of us."
    	;;
    n | N| no | No)
    	echo "Try it, and you will like it . "
    	;;
    * )
    	echo "your answer is: $like_it"
    	;;
    esac	
    

    循環(huán)

    for循環(huán)

    1、循環(huán)輸出操作系統(tǒng)的名字

    # !/bin/bash
    clear
    for os in Linux Windows UNIX MAC
    do
    	echo "Operation System is : $os"
    done
    

    2、用命令行參數(shù)輸入操作系統(tǒng)的名字并輸出

    #! /bin/bash 
    for os  
    do 
      echo "Operation System is: $os" 
    done  
    

    while循環(huán)

    1、while循環(huán)輸出1-10

    # !/bin/bash
    clear
    loop=0
    while [ $loop -ne 10 ]
    do
    	let loop=$loop+1
    	echo "current value of loop is : $loop"
    done
    

    until循環(huán)

    until循環(huán)輸出1-10

    # !/bin/bash
    clear
    loop=0
    until [ $loop -eq 10 ]
    do
    	let loop=$loop+1
    	echo "current value of loop is : $loop"
    done
    

    函數(shù)

    1、參數(shù)的使用

    # !/bin/bash
    function demo_fun ( )
    {
    	echo "Your command is: $0$*"
    	echo "Number of parameters ( \$#) is: $#"
    	echo "Parameters ( \$* ) is: $*"
    	echo "Parameters ( \$@) is: $@"
    	count=1
    	for param in $@
    	do
    		echo "Parameters ( \$$count) is: $param"
    		let count=$count+1
    	done
    }
    clear
    demo_fun $@
    

    2、shift的使用

    # !/bin/bash
    function function_shift ( )
    {
    	echo "Your command is: $0$*"
    	echo "Number of parameters ( \$#) is: $#"
    	echo "Parameters ( \$* ) is: $*"
    	echo "Parameters ( \$@) is: $@"
    	count=1
    	while [ -n "$1" ]
    	do
    		echo "Parameters ( \$$count) is: $1"
    		let count=$count+1
    		shift
    	done
    }
    clear
    function_shift $@
    

    函數(shù)返回值

    1、顯式返回

    # !/bin/bash
    function fun_return1 ( )
    {
    	dir_name=$1
    	rtn_value=0
    	if ! cd $dir_name > /dev/ null 2>&1; then
    		rtn_value=1
    	fi
    	return $rtn_value
    }
    clear
    if fun_return1 $@; then
    	echo "function executes sucessfully ! "
    else
    	echo "function executes failed ! "
    fi	
    

    2、隱式返回

    #! /bin/bash 
    function fun_return2() 
    { 
      dir_name=$1 
      cd $dir_name > /dev/null 2>&1
      return 
    } 
    clear 
    if fun_return2 $@; then 
      echo "function executes sucessfully!" 
    else 
      echo "function executes failed!" 
    fi
    

    綜合運(yùn)用

    1、 帶一個(gè)(目錄)參數(shù),可瀏覽目錄下的內(nèi)容。(lsdir.sh) 實(shí)現(xiàn)功能: (1)首先判斷(if)是否帶有參數(shù),若無(wú)則顯示(echo)用法信息后,報(bào)錯(cuò)返回(exit); (2)首先判斷該參數(shù)是不是目錄。若是則列目錄的內(nèi)容(ls)字符串實(shí)現(xiàn)簡(jiǎn)單的行編輯器,否則,提示用戶不是目錄,則顯示警告信息后報(bào)錯(cuò)返回。

    運(yùn)行:設(shè)程序名為lsdir.sh,為其增加執(zhí)行權(quán)chmod 755 lsdir.sh

    運(yùn)行: ./lsdir.sh ./lsdir.sh dir #如果dir是個(gè)目錄,則列其內(nèi)容 ./lsdir.sh file #若file是文件或不存在則給出警告后返回

    #! /bin/bash 
    if [ $# -ne 1 ] 
    then 
      echo "Usage: $0 dir"   
    exit 1 
    fi 
    if [ -d "$1" ] 
    then 
      ls -l $1/*    
      exit 0 
    fi 
    echo "Warn: $1 is not a directory"  
    exit 2
    

    2、只用嵌套結(jié)構(gòu)if-fi實(shí)現(xiàn)上述程序 (.sh)

    #! /bin/bash 
    if [ $# -ne 1 ] 
    then 
      echo "Usage: $0 dir" 
      exit 1 
    elif [ -d "$1" ] 
    then 
      ls $1/* 
      exit 0 
    else 
      echo "Warn: $1 is not a directory" 
      exit 2 
    fi
    

    3、帶數(shù)值參數(shù),并可計(jì)算這些數(shù)值參數(shù)之和(sum.sh)

    #! /bin/bash 
    x=0 
    for y in $* 
    do 
      x=`expr $x + $y` 
    done 
    echo "The sum is: $x"
    

    4、文件備份的shell程序

    #! /bin/bash
    LOG_START_TIME=`date+"%Y%m%d%H%M%S"`
    BACKUP_DIR=~/Lesson10/backup
    BACKUP_LOG="$BACKUP_DIR/${LOG_START_TIME}.log"
    function write_log(){
    log_time=`date+%Y-%m-%d-%H-%M-%s`
    backup_file_name=$2
    err_msg="$log_time ERROR in backup file/directory($backup_file_name)"
    suc_msg="$log_time SUCCESS in backup file/directory($backup_file_name)"
    if [ $1 -eq 0 ] ;then
    echo $suc_msg
    echo $suc_msg>>$BACKUP_LOG
    else
    echo $ess_msg
    echo $err_msg>>$BACKUP_LOG
    fi
    }
    function backup_file(){
    cp -fi$1 $BACKUP_DIR> /dev/null 2>&1
    write_log $?$1
    }
    function create_log_file(){
    if [ ! -e $BACKUP_DIR ];then
    mkdir -p $BACKUP_DIR
    fi
    if [ -e $BACKUP_LOG ] ;then
    rm -rf $BACKUP_LOG
    fi
    touch $BACKUP_LOG
    }
    clear
    echo "Backup Process Begins"
    create_log_file
    for file in $@
    do
    backup_file $file
    done
    echo "Backup Process ends"
    

    5、計(jì)算前n個(gè)正整數(shù)的和(sum_n.sh)

    #! /bin/bash
    if [ $# -ne 1 ]
    then S
    	echo "Usage: $0 n"
    	exit 1
    fi
    x=0
    y=0
    while true
    do
    	x= 'expr $x + $y'
    	y= 'expr $y + 1'
    	if [ $y -gt $1 ]
    	then
    		break
    	fi
    done
    echo "1+2+.....+$1 = $x"
    

    6、編寫(xiě)shell程序(.sh),在/home目錄下建立10個(gè)目錄,即user1~,并設(shè)置每個(gè)目錄的權(quán)限,其中:

    (1) 文件所有者的權(quán)限為:讀、寫(xiě)、執(zhí)行

    (2) 文件所有者所在組的權(quán)限為:讀、執(zhí)行

    (3) 其他用戶的權(quán)限為:讀

    #! /bin/sh 
    i=1 
    while [ $i -le 10 ]
    do 
      if [ -d /home ];then 
        mkdir -p /home/user$i  
        chmod 754 /home/user$i   
        echo "user$i"  
        let "i=i+1"   
      else 
        mkdir /home 
        mkdir -p/home/user$i   
        chmod 754 /home/user$i   
        echo "user$i"  
        let "i=i+1"  
      fi 
    done
    

    7、編寫(xiě)shell程序(.sh),在/home目錄下建立10個(gè)目錄(即user1~)自動(dòng)刪除,并顯示刪除信息

    #! /bin/bash 
    i=1 
    while [ $i -le 10 ] 
    do 
      if [ -d /home/user$i ];then  
        rm -rf /home/user$i 
        echo "Directory /home/user$i deleted"  
      fi 
      let "i=i+1" 
    done
    

    8、編寫(xiě)九九乘法表的shell程序(.sh)

    #!/bin/bash
    for ((i=1;i<=9;i++))
    do
    	for ((j=1;j<=i;j++))
    	do
    		let "sum=i*j"
    		echo -n " $j*$i=$sum  "
    	done
    echo
    done
    

    9、在Linux中使用ls命令時(shí),不顯示統(tǒng)計(jì)信息。要求編寫(xiě)一個(gè)shell程序(.sh),能統(tǒng)計(jì)出當(dāng)前目錄中子目錄、文件數(shù)量

    #!/bin/bash
    fun_directory() {     
      let "filenum=0"
      let "dirnum=0"
      for i in $( ls )
    do
       if [ -d $i ]
       then
          let dirnum+=1
       else
          let filenum+=1
       fi
    done
    echo "The number of directorys is $dirnum"
    echo "The number of files is $filenum"
    }
    fun_directory
    

    4. Linux概念辨析 4.1 Linux簡(jiǎn)答題題目(概念) Linux操作系統(tǒng)和系統(tǒng)的區(qū)別,優(yōu)越性技術(shù)概念,和虛擬機(jī)有什么區(qū)別shell編程求計(jì)算式表達(dá)上課的冒號(hào)、反引號(hào)、單引號(hào)、雙引號(hào)有什么區(qū)別Linux操作系統(tǒng)啟動(dòng)步驟:加載、引導(dǎo)配置文件名Linux有多少種運(yùn)行級(jí)別 4.2 題目解析

    Linux概念來(lái)源

    1、Linux操作系統(tǒng)和系統(tǒng)的區(qū)別,優(yōu)越性

    Linux系統(tǒng)優(yōu)點(diǎn):

    開(kāi)放性。Linux操作系統(tǒng)遵守GNU規(guī)范,代碼共享,易于實(shí)現(xiàn)系統(tǒng)的裁剪和客制化的開(kāi)發(fā)多用戶。系統(tǒng)資源可以被不同用戶以各自的權(quán)限訪問(wèn)使用,互不影響多任務(wù)和多線程。不同任務(wù)和線程幾乎同時(shí)并發(fā)處理獨(dú)立的但內(nèi)在關(guān)聯(lián)的一系列事件設(shè)備獨(dú)立性:Linux操作系統(tǒng)把外部設(shè)備統(tǒng)一當(dāng)做設(shè)備文件看待,只要安裝他們的驅(qū)動(dòng)程序,任何用戶都可以像使用普通文件一樣操縱、使用這些設(shè)備,而不必知道他們的具體存在形式。豐富的網(wǎng)絡(luò)功能:完善的內(nèi)置網(wǎng)絡(luò)是Linux的一大特點(diǎn)。

    Linux系統(tǒng)缺點(diǎn):

    無(wú)特定支持廠商:因?yàn)長(zhǎng)inux上面的軟件包括系統(tǒng)都是免費(fèi)發(fā)行的,所以不會(huì)有售后圖形界面不夠友好游戲支持度不足:在Linux上開(kāi)發(fā)的大型游戲幾乎沒(méi)有。

    Linux系統(tǒng)和系統(tǒng)的區(qū)別:

    開(kāi)放性。Linux系統(tǒng)開(kāi)放源碼系統(tǒng),可以對(duì)其程序進(jìn)行編輯修改。而微軟的系統(tǒng)受微軟版權(quán)保護(hù),只能微軟內(nèi)部進(jìn)行開(kāi)發(fā)以及修改。價(jià)格。Linux免費(fèi)送使用,而系統(tǒng)需要花錢購(gòu)買。文件格式不同。操作系統(tǒng)內(nèi)核是NT,而Linux是shell。硬盤(pán)格式文件是fat32或者NTSF,而Linux需要的文件格式是ext2或ext3,還多一個(gè)SWAP格式的交換分區(qū)。

    2、技術(shù)概念,和虛擬機(jī)有什么區(qū)別

    技術(shù)概念

    是一個(gè)開(kāi)發(fā),運(yùn)輸和運(yùn)行應(yīng)用程序的開(kāi)放平臺(tái)。使您可以將應(yīng)用程序與基礎(chǔ)架構(gòu)分離,以便快速交付軟件。使用,您可以像管理應(yīng)用程序一樣管理基礎(chǔ)架構(gòu)。通過(guò)利用的方法快速發(fā)送,測(cè)試和部署代碼,您可以顯著減少編寫(xiě)代碼和在生產(chǎn)中運(yùn)行代碼之間的延遲。

    鏡像:鏡像是我們把應(yīng)用程序和運(yùn)行環(huán)境打包在一起的文件,可以編寫(xiě) file來(lái)告訴如何把我們的環(huán)境和應(yīng)用打包在一起,形成一個(gè)鏡像文件。倉(cāng)庫(kù):倉(cāng)庫(kù)是一臺(tái)存放鏡像的服務(wù)器。可以將開(kāi)發(fā)好的鏡像上傳倉(cāng)庫(kù),也可以從倉(cāng)庫(kù)中拉取、分享鏡像。容器:是鏡像啟動(dòng)之后的實(shí)體。一個(gè)鏡像可以啟動(dòng)多個(gè)實(shí)體。

    3、shell編程求計(jì)算式表達(dá)

    雙尖括號(hào) (())

    雙方括號(hào)**[[]]**,支持字符串模式匹配即正則表達(dá)式

    老方法

    1)執(zhí)行數(shù)學(xué)表達(dá)式 expr

    expr 1+5

    2)單方括號(hào)

    $[ ]

    4、shell編程中冒號(hào)、反引號(hào)、單引號(hào)、雙引號(hào)有什么區(qū)別

    冒號(hào):

    參數(shù)擴(kuò)展:

    :abc=1234
    echo $abc
    

    清空文件

    :>123.txt
    

    腳本注釋、占位符:在編寫(xiě)腳本的過(guò)程中,某些語(yǔ)法需要多個(gè)組成部分,但開(kāi)始階段沒(méi)有想好,這樣就可用來(lái)做占位符,執(zhí)行起來(lái)就不會(huì)報(bào)錯(cuò)了。

    反引號(hào):反引號(hào)內(nèi)作為一個(gè)系統(tǒng)命令并執(zhí)行

    例:time=`date`
        echo "Today is $time"
        結(jié)果:Today is Thu Dec  8 02:00:48 PST 2016
        echo $time
        結(jié)果:Thu Dec  8 02:00:48 PST 2016
    

    單引號(hào):所有轉(zhuǎn)移符全部關(guān)閉,完整的反映括號(hào)中的內(nèi)容

    例:
        name="user"
        echo 'My name is  $name'
        結(jié)果: My name is $name
    

    雙引號(hào):部分轉(zhuǎn)義符關(guān)閉,但某些則保留(如:$ )

    例: name="user"
        echo "My name is  $name"
        結(jié)果: My name is user
    

    5、Linux操作系統(tǒng)啟動(dòng)步驟

    內(nèi)核的引導(dǎo)。

    當(dāng)計(jì)算機(jī)打開(kāi)電源后,首先是BIOS開(kāi)機(jī)自檢,按照BIOS中設(shè)置的啟動(dòng)設(shè)備(通常是硬盤(pán))來(lái)啟動(dòng)。

    操作系統(tǒng)接管硬件以后,首先讀入 /boot 目錄下的內(nèi)核文件。

    運(yùn)行 init。

    init 進(jìn)程是系統(tǒng)所有進(jìn)程的起點(diǎn),你可以把它比擬成系統(tǒng)所有進(jìn)程的老祖宗,沒(méi)有這個(gè)進(jìn)程,系統(tǒng)中任何進(jìn)程都不會(huì)啟動(dòng)。

    init 程序首先是需要讀取配置文件 /etc/。

    系統(tǒng)初始化。

    在init的配置文件中有這么一行: si:::/etc/rc.d/rc.它調(diào)用執(zhí)行了/etc/rc.d/rc.,而rc.是一個(gè)bash shell的腳本,它主要是完成一些系統(tǒng)初始化的工作,rc.是每一個(gè)運(yùn)行級(jí)別都要首先運(yùn)行的重要腳本。

    它主要完成的工作有:激活交換分區(qū),檢查磁盤(pán),加載硬件模塊以及其它一些需要優(yōu)先執(zhí)行任務(wù)。

    建立終端 。

    rc執(zhí)行完畢后,返回init。這時(shí)基本系統(tǒng)環(huán)境已經(jīng)設(shè)置好了,各種守護(hù)進(jìn)程也已經(jīng)啟動(dòng)了。

    init接下來(lái)會(huì)打開(kāi)6個(gè)終端,以便用戶登錄系統(tǒng)

    用戶登錄系統(tǒng)。

    用戶的登錄方式有三種:

    6、配置文件名

    httpd.conf,yum安裝后,配置文件httpd.conf存放在目錄/etc/httpd/conf下

    7、Linux有多少種運(yùn)行級(jí)別

    運(yùn)行級(jí)別0:系統(tǒng)停機(jī)狀態(tài),系統(tǒng)默認(rèn)運(yùn)行級(jí)別不能設(shè)為0,否則不能正常啟動(dòng)

    運(yùn)行級(jí)別1:?jiǎn)斡脩艄ぷ鳡顟B(tài),root權(quán)限,用于系統(tǒng)維護(hù),禁止遠(yuǎn)程登陸

    運(yùn)行級(jí)別2:多用戶狀態(tài)(沒(méi)有NFS)

    運(yùn)行級(jí)別3:完全的多用戶狀態(tài)(有NFS),登陸后進(jìn)入控制臺(tái)命令行模式

    運(yùn)行級(jí)別4:系統(tǒng)未使用,保留

    運(yùn)行級(jí)別5:X11控制臺(tái),登陸后進(jìn)入圖形GUI模式

    運(yùn)行級(jí)別6:系統(tǒng)正常關(guān)閉并重啟,默認(rèn)運(yùn)行級(jí)別不能設(shè)為6,否則不能正常啟動(dòng)

網(wǎng)站首頁(yè)   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號(hào):冀ICP備2024067069號(hào)-3 北京科技有限公司版權(quán)所有