真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

shell腳本編程(1)-創(chuàng)新互聯(lián)

1.什么是shell腳本

網(wǎng)站設計制作過程拒絕使用模板建站;使用PHP+MYSQL原生開發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺管理系統(tǒng);網(wǎng)站設計、成都網(wǎng)站制作收費合理;免費進行網(wǎng)站備案等企業(yè)網(wǎng)站建設一條龍服務.我們是一家持續(xù)穩(wěn)定運營了十余年的創(chuàng)新互聯(lián)網(wǎng)站建設公司。

shell是一個命令行解釋器,它的作用就是遵循一定的語法將輸入的命令加以解釋并傳給系統(tǒng)。它為用戶提供了一個向Linux發(fā)送請求以便運行程序的接口系統(tǒng)級程序,shell本身是一個用C語言編寫的程序,他是用戶使用Linux的橋梁。

    簡單來說,shell腳本就是命令的堆積。

2.shell腳本之基本格式

腳本開頭:第一行,頂格寫

#!/bin/bash

    注釋信息:shell腳本中會忽略"#"開頭的行,所以為了方便自己和他人的查看,那么我們一般都會在腳本中添加注釋信息方便以后觀看。古人云:不添加注釋的腳本都是耍流氓。通常的注釋信息可以這樣寫:

#!/bin/bash
# application
# versions
# date
# name
# email

3.shell腳本之變量

局部變量:

    普通變量,僅在創(chuàng)建它的shell中有效

本地變量:

    當前shell中的變量,本地變量包含環(huán)境變量,本地變量的非環(huán)境變量不具備繼承性

環(huán)境變量:

    對創(chuàng)建它的shell及其派生出來的子進程都有效

位置參數(shù)變量:

      $1,$2,$3...

特殊變量:

    $0:腳本文件路徑本身

$#:腳本參數(shù)的個數(shù)

$*:所有參數(shù)(后面參數(shù)以多個字符串表示)

$@:所有參數(shù)(后面參數(shù)以一個字符串表示)

4.shell腳本之基本運算

    在shell腳本基本的運算符號有:

            +   -   *   /   %  **

    由于shell是弱類型的編程語言,所以我們在做算術(shù)運算的時候需要這樣寫:

	    let VAR=$num1 op $num2
	    VAR=$[expression]
	    VAR=$((expression))
	    VAR=$(expr argu1 argu2 argu3)

 例:計算6+8

                let VAR=6+8
                VAR=$[6+8]

     增強型賦值:

  變量做某種算術(shù)運算后回存至此變量中

例:

                自增: let VAR+=1        
                自減: let VAR-=1
                ......

5.shell腳本之條件測試

    通常情況下判斷某需求是否滿足,需要由測試機制來實現(xiàn)

 可以用 "$?" 來判斷上一條命令正確與否

如何編寫測試表達式以實現(xiàn)所需的測試:

執(zhí)行命令,并利用命令的狀態(tài)返回值來判斷:

        0:成功

        1-255:失敗

測試表達式:

        test EXPRESSION

        [ EXPRESSION ]

        ` EXPRESSION `

那么bash的測試類型基本分為三類:

(1)數(shù)值測試:數(shù)值比較

          -eq:是否等于

       -ne:是否不等于
       -gt:是否大于
       -ge:是否大于等于
       -lt:是否小于
       -le:是否小于等于

例:判斷2是否大于3

shell腳本編程(1)

(2)字符串測試:字符比較

            ==:是否等于

       > :是否大于
       < :是否小于
       !=:是否不等于

       =~:左側(cè)字符串是否能被右側(cè)的PATTERN所匹配

例:判斷主機名為空,或者為localhost.locadomain,或者包含localhost,或者包含linux,則通通將其設為 www.magedu.com

#!/bin/bash
#
H=$(hostname)
[[ "$H" == " " || "$H" =~ "localhost.locadomain" || "$H" =~ "localhost" || "$H"=~"linux" ]] && hostname www.magedu.com

(3)文件測試:

存在性測試:

        -a FILE

        -e FILE

            文件的存在性測試,存在則為真,否則則為假

存在性及類型測試:

        -b FILE:是否存在為塊設備文件,是則為真,否則為假

        -c FILE:是否存在為字符設備文件

        -d FILE:是否存在為目錄文件

        -f FILE:是否存在為普通文件

        -h FILE或 -L FILE :是否存在為符號鏈接文件

        -p FILE :是否存在為命令管道文件

        -S FILE:是否存在為套接字文件

文件權(quán)限測試:

        -r FILE :是否存在并且對當前用戶可讀

        -w FILE :是否存在并且對當前用戶可寫

        -x FILE :是否存在并且對當前用戶可執(zhí)行

特殊權(quán)限測試:

        -u FILE :是否存在并且擁有SUID權(quán)限

        -g FILE :是否存在并且擁有SGID權(quán)限

        -k FILE :是否存在并且擁有sticky權(quán)限

文件是否有內(nèi)容:

        -s FILE :文件是否存在并且非空,有則為真,沒有則為假

時間戳:

        -N FILE:文件自從上一次讀操作后是否被修改過

從屬關(guān)系測試:

        -O FILE :當前用戶是否為文件的屬主

        -G FILE :當前用戶是否為文件的屬組

雙目測試:

    FILE1 -ef FILE2 :FILE1與FILE2是否指向同一個文件系統(tǒng)的相同inode的硬鏈接

    FILE1 -nt FILE2 :FILE1是否新于FILE2

    FILE1 -ot FILE2 :FILE1 是否舊于FILE2

例:通過命令行參數(shù),給定兩個文本文件名,如果某文件不存在,則結(jié)束腳本執(zhí)行,若都存在時,返回每個文件的行數(shù),并echo出其中行數(shù)較多的文件名

#!/bin/bash
#
[ $# -ne 2 ] && echo "請給定兩個文本文件名" && exit 2
[ -e "$1" ] && file1=$(cat "$1" | wc -l) || exit 3
[ -e "$2" ] && file2=$(cat "$2" | wc -l) || exit 4
[ "$file1" -gt "$file2" ] && echo "$1的行數(shù)為$file1" || echo "$2的行數(shù)為$file2"

6.shell腳本之選擇執(zhí)行

過程式編程語言的代碼執(zhí)行順序:

順序執(zhí)行:逐條執(zhí)行

選擇執(zhí)行:

代碼有一個分子:條件滿足時才會執(zhí)行

兩個或以上的分支:只會執(zhí)行其中一個滿足條件的分支

循環(huán)執(zhí)行:

代碼片段(循環(huán)體) 要執(zhí)行0、1或多個來回

shell腳本中的選擇執(zhí)行:

單分支的if語句:

        if 測試條件;then

  代碼分支

        fi

    或者:

        if 測試條件

        then

  代碼分支

        fi

雙分支的if語句:

        if 測試條件;then

   條件為真時執(zhí)行的分支

        else

   條件為假時執(zhí)行的分支

        fi

多分支的if語句:

        if 測試條件;then

   條件為真時執(zhí)行的分支

        elif 測試條件;then

        elif 測試條件;then

        elif 測試條件;then

        ......

        else

   條件為假時執(zhí)行的分支

        fi

例:

1.通過參數(shù)傳遞一個用戶名給腳本,此用戶名如果不存在的話,則進行添加

#!/bin/bash
#
if [ "$#" -ne 1 ];then
    echo "請輸入一個用戶名"
    exit 2
fi
user=$(grep "^$1\>" /etc/passwd)
if ! [ -s "$user" ];then
    useradd "$1"
    echo "用戶$1已添加"
fi

2.通過命令參數(shù),給定兩個數(shù)字,輸出其中較大的數(shù)值

#!/bin/bash
#
if [ "$#" -ne 2 ];then
    echo "請給定兩個數(shù)字"
    exit 2
fi
if [ "$1" -gt "$2" ];then
    echo "$1"
elif [ "$1" -eq "$2" ];then
    echo "$1=$2"
else
    echo "$2"
fi

7.shell腳本之命令交互

read [OPTIONS]...

             -p'PROMPT'提示符

        -t TIMEOUT

例:

1.寫一個腳本,提示用戶輸入一個字符串,如果輸入的是quit,則退出,否則,顯示其輸入的字符串腳本內(nèi)容

#!/bin/bash
#
read -p "請輸入一個字符串:" A
if [ "$A" == quit ];then
    exit 2
else
    echo "$A"
fi

2.背景:公司來了個新員工,需要給新員工開通系統(tǒng)帳號和統(tǒng)計出新員工的信息。(通過交互的方式)

讓用戶指定一個用戶名和密碼,若用戶名之前存在,先進行刪除。之后則為用戶添加系統(tǒng)帳號。

完成后,需要統(tǒng)計員工的:手機號,email,QQ號,年齡信息,收集后存儲到該用戶的家目錄中。

完成以上操作,詢問該用戶,是否需要給用戶單獨建立一個工作目錄為/data/username,默認是需要,如果不需要,則需輸入n或者N

#!/bin/bash
#

read -p "請輸入用戶名:" user
grep "^$user\>" /etc/passwd > /dev/null && userdel -r $user
useradd $user

read -p "請輸入用戶密碼:" pswd

echo $pswd | passwd --stdin $user > /dev/null

read -p "請輸入手機號碼:" number
read -p "請輸入email:" mail
read -p "請輸入QQ號碼:" qq
read -p "請輸入年齡信息:" age
echo "手機號碼:$number,email:$mail,QQ:$qq,年齡:$age" > /home/$user/xinxi.txt

read -p "是否需要建立一個工作目錄[Y/N]" A

if [ "$A" == Y ];then
   mkdir -p /date/$user
   echo "用戶已創(chuàng)建,工作目錄已創(chuàng)建"
else
   echo $A
   echo "用戶已創(chuàng)建"
fi

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


本文名稱:shell腳本編程(1)-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://weahome.cn/article/isgjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部