本文作者:心月

shell編程:變量的高級用法(附實例)

心月IT博客 2019-06-11
摘要:hell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設計語言。Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。

1、變量替換和測試

    變量替換:

        ①、${變量#匹配規則} #從頭開始匹配,最短刪除;

        ②、${變量##匹配規則} #從頭開始匹配,最長刪除;

        ③、${變量%匹配規則} #從尾開始匹配,最短刪除;

        ④、${變量%%匹配規則} #從尾開始匹配,最長刪除;

        ⑤、${變量/舊字符串/新字符串} #替換變量內的舊字符串為新字符串,只替換第一個舊字符串

        ⑥、${變量//舊字符串/新字符串} #替換變量內的舊字符串為新字符串,全部替換;


     實例:

    variable_1 = "I love you,Do you love me"
    var1=${variable_1#*ov} //var1的結果 "e you,Do you love me"
    var2=${variable_1##*ov} //var2的結果 "e me"
    var3=${variable_1%ov*} //var3的結果 "I love you,Do you l"
    var4=${variable_1%%ov*} //var4的結果 "I l"
    var5=${variable_1/love/like} //var5的結果為 "I like you,Do you love me"
    var6=${variable_1//love/like} //var5的結果為 "I like you,Do you like me"

 

2、字符串處理

    計算字符串長度:

        ${#string}

        expr length "$string"  //字符串中有空格則必須加引號


        實例:

        var1="Hello World"
        len = ${#var1}        //11
        `expr length "$var1"`    //11


    獲取子字符串中的索引位置:(獲取的是字符的位置不是字符串的位置)

        expr index $string $substring //獲取滿足$substring條件的字符串在$string中的索引位置

        

        實例:

        var1="Hello World"
        `expr index $var1 World`//7
        `expr index $var1 or`//5


    計算子串長度:

        expr match $string substr //從頭部開始匹配


        實例:

        var1="Hello World"
        `expr match "$var1" World` //0
        `expr match "$var1" Hello` //5
        `expr match "$var1" Hello.*` //11


    抽取子串:

         ${string:position} 從 string中的position開始

         ${string:position:length} 從position開始,匹配長度為length

         ${string: -position} 從右邊開始匹配

         ${string:(position)} 從左邊開始匹配 ,索引從0開始

         expr substr $string $position $length 從position開始,匹配長度為length,索引從1開始


      實例:

        var1="Hello World"
        ${var1:6}    //World
        ${var1:4:10}    //o World
        ${var1: -3}    //rld
        ${var1: -3:2}    //rl
        `expr substr "$var1" 5 10` //o Worl


3、命令替換

    所謂命令替換就是將某一段需要命令執行的結果作為另一個shell命令的一部分。


     語法格式:

         `command` (反引號)

         $(command)


       實例:

           獲取系統的所有用戶并輸出:

    cat /etc/passwd | cut -d ":" -f 1 //cut -d ":" :用':'分割結果, -f 1:取分割后的第一個


    根據系統時間計算今年或明年

       $(date +%Y) : 今年

       $(($(date +%Y) + 1)) : 明年 //$(())主要用來進行算數運算

       num1=50

       num2=70

       echo $(($num1 + $num2)) //120


    實例:

       計算今年還剩多少個星期:

     echo $(((365-$(date +%j))/7))


       獲取linux中正在運行的nginx進程

     ps -ef | grep nginx | grep -v grep | wc -l //grep -v : 排除, wc -l統計前面執行的結果有多少行


4、有類型變量

    通過declare聲明變量類型

         var1="hello world" 

         declear -r $var1 //聲明var1為只讀變量

         declare -i - //聲明為整形

         declare -a - //聲明為數組

         (數組定義: arr=("mike" "joe" "juny"))

         declare -f //顯示定義的函數和內容

         declare -f //顯示定義的函數,不會顯示內容

         declare -x - //聲明變量為環境變

         (取消聲明變量:把減號'-'換成加號'+')


5、數學運算:expr

(運算時,特殊符號要轉義:| < > * & <= >=)

expr $num1 opearator $num1 //只能進行整數運算

$(($num1 opearator $num1)) //'*'不需要轉義,在比較判斷時可能出錯,只能進行整數運算

num1=50
num2=70
expr $num1 \< $num2 //比較num1、num2的大小

num3=$(($num1+$num2))
echo $num3    //120


判斷一個變量是否為正整數:

(先判斷是否為整數,然后判斷是否為正數)

實例:

    輸入一個整數n,計算1+2+3+...+n的值

#/bin/sh/
#

num=25
$((expr $num \> 0))

while true
do
	read -p "pls input a positive number: " num
	expr $num + 1 &> /dev/null

	if [ $? -eq 0 ];then
		if [ `expr $num \> 0` -eq 1 ];then
			for((i=1;i<=$num;i++))
			do
				sum=`expr $sum + $i`
			done
				echo "1+2+3+...+$num = $sum"
				exit
		fi	

	fi
	echo "error,input enlegal"
done


6、數學運算:bc

(可以處理浮點數運算)

num1=2.3
num2=3.1
echo "num1 + num2" | bc//5.4
echo "scale=3;$num1 / $num2" | bc//0.741; scale:指定精確位數


文章版權及轉載聲明:

作者:心月 本文地址:http://www.eojird.tw/linux/277.html發布于 2019-07-01
文章轉載或復制請以超鏈接形式并注明出處心月IT博客

分享到:
贊(

發表評論

快捷輸入:

    評論列表 (有 0 條評論,人圍觀)參與討論