日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

eq linux_linux之shell编程(二)

發布時間:2025/3/21 linux 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 eq linux_linux之shell编程(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天給大家繼續來分析linux下的shell編程,在上一篇文章簡單的介紹了shell編程到底是什么,以及它的一些基本使用規則。我們今天主要來分享shell編程中的一些其他用法,比如說:條件語句,循環語句等;好了下面就開始了我們今天的內容了:

一、shell中的變量定義和引用:

1、變量定義和初始化:shell是弱類型語言(語言中的變量如果有明確的類型則屬于強類型語言;變量沒有明確類型就是弱類型語言),和C、C++語言不同。在shell編程中定義變量不需要制定類型,也沒有類型這個概念。

2、變量定義時可以初始化,使用=進行初始化賦值。在shell中賦值的=兩邊是不能有空格的。同時要注意:shell對語法非常在意,非常嚴格。很多地方空格都是必須沒有或者必須有,而且不能隨意有沒有空格。

3、變量賦值,變量定義后可以再次賦值,新的賦值會覆蓋老的賦值。shell中并不刻意區分變量的定義和賦值,反正每個變量就是一個符號,這個符號的值就是最后一個給他賦值時的值。

4、變量引用。shell中引用一個變量必須使用符號,符號就是變量解引用符號。基于上面的理論,我們現在來實戰演示:

#!/bin/bash
string="I love shell"
echo $string

演示結果:

root@txp-virtual-machine:/home/txp# source test.sh
I love shell

這里同時也演示一下在變量定義的時候,不要有空格錯誤演示:

#!/bin/bash
string ="I love shell"
echo $string

演示結果,你將會看到下面這樣的錯誤提示,雖然最終可以打印出來我們想要的結果,但是我們作為程序員一枚,自然是要做到—— 0 error , 0 warning

root@txp-virtual-machine:/home/txp# source test.sh
No command 'string' found, did you mean:
Command 'strings' from package 'binutils' (main)
Command 'strings' from package 'binutils-multiarch' (main)
Command 'spring' from package 'spring' (universe)
string: command not found
I love shell

擴展總結:

a、$符號后面跟一個字符串,這個字符串就會被當作變量去解析。如果這個字符串本身沒有定義,執行時并不會報錯,而是把這個變量解析為空。也就是說在shell中沒有被定義的變量其實就相當于是一個定義并賦值為空的變量。

b、變量引用的時候可以,也可以{var}。這兩種的區別是在某些情況下只能用而不能簡單的var。

c、還是主要在給變量賦值的時候不要在“=”與變量符號和所賦的值之間留空格,可能剛開始大家有點不習慣這種風格,比較在c和c++里面寫代碼,留空格,是一種代碼風格,日后別人去看代碼,看著也舒適;總之還是那句話,習慣了就好,畢竟規則是這么定的。

二、shell中調用linux命令:

有的時候,你不想輸入太多的命令,可以在寫一個shell腳本,把你要寫的命令操作全部寫進去,然后一鍵操作猛如虎,哈哈,于是乎,這里就出現了在shell腳本中使用命令兩種目的:

1、直接執行:

這里我演示一下,我查看當前目錄下有什么文件,我只要在shell腳本里面輸入一個ls命令就行,具體看下面演示:

#!/bin/bash
ls

然后我們只要執行這個腳本文件就能實現我的功能了,這里只是簡單的演示,有的時候寫腳本對我們幫助非常大,可以提高我們的工作效率:

root@txp-virtual-machine:/home/txp# source test.sh
1 2.c Desktop Downloads fun.sh hello.c linux-2.6.35.7.tar.gz Music Public Templates test.sh Videos
1.c a.out Documents examples.desktop h.c linux-2.6.35.7 linux-2.6.35.7.tar.gz.1 Pictures return.sh test test.sj vmware-tools-distrib

2、反引號括起來執行。有時候我們在shell中調用linux命令是為了得到這個命令的返回值(結果值),這時候就適合用一對反引號(鍵盤上ESC按鍵下面的那個按鍵,和~在一個按鍵上)來調用執行命令:

#!/bin/bash
PWD=`pwd`
echo $PWD

這里演示的結果是使用pwd命令用于顯示用戶當前所處的工作目錄:

root@txp-virtual-machine:pwd# source test.sh
/home/txp

三、shell中的選擇分支結構:

看到選擇分支結構,大家應該都比較熟悉,第一反應就會想到if條件語句,沒錯就是它;在學習c、c++語言的時候,if條件語句對你來說簡直小菜一碟,但是shell中的格式跟我們c、c++中的不一樣,不過在掌握shell中的書寫格式后,因為寫法思想和之前的一樣,只是說換了一種形式而已,俗話說的好:“換湯不換藥”,同樣對你來說是小菜一碟。

1、條件測試語句類型:

文件測試語句
邏輯測試語句
整數值比較語句
字符串比較語句

a、在這些語句中我們有的時候看別人腳本的時候,也經常會看到,因此我們必須掌握,日后也方便自己來寫shell腳本,下面是文件測試中常見遇到的參數類型匯總:

操作符作用
-d測試文件是否為目錄類型
-e測試文件是否存在
-f判斷是否為一般文件
-r測試當前用戶是否有權限讀取
-w測試當前用戶是否有權限寫入
-x測試當前用戶是否有執行權限執行

b、邏輯測試語符號(這個比較簡單,對于我們做嵌入式的,在c語言里面就已經掌握了非常好了):

這里用的比較多是邏輯與:&&(它表示當前面的命令執行成功后才會執行它后面的命令)

還有一個就是邏輯或:||(表示當前面的命令執行失敗后才會執行它后面的命令)

最后一種就是邏輯非:!(它表示把條件測試中的判斷結果取相反值。也就是說,如果原本測試的結果是正確的,則將其變成錯誤的;原本測試錯誤的結果則將其變成正確的)

c、整數比較運算符匯總:

操作符作用
-eq是否等于
-ne是否不等于
-gt是否大于
-lt是否小于
-le是否等于或小于
-ge是否大于或等于

d、字符比較運算符匯總:

操作符作用
=比較字符串內容是否相同
!=比較字符串內容是否不同
-z判斷字符串內容是否為空

2、if語句的三種格式書寫:

a、單分支結構:

if 條件測試操作
then 命令序列
fi

b、雙分支結構:

if 條件測試操作
then 命令序列1
else 命令序列2
fi

c、多分支結構:

if 條件測試擦做1
then 命令序列1
elif 條件測試操作2
then 命令序列2
else
命令序列3
fi

3、實戰演示:

判斷文件是否存在,不存在的話,就創建一個這樣的文件:

#!/bin/bash
if [ -f a.c ]
then echo "yes"
else
echo "no"
touch a.c
fi

演示結果:

root@txp-virtual-machine:/home/txp# source test.sh
no
root@txp-virtual-machine:/home/txp# ls
a.c

判斷目錄文件是否存在 ,這里我就以上面是否存在/hoem/txp這個目錄類型的文件來演示了:

#!/bin/bash
[ -d /home/txp ]
echo $?

演示結果,這里注意通過Shell解釋器的內設$?變量顯示上一條命令執行后的返回值。如果返回值為0,則目錄存在;如果返回值為非零的值,則意味著目錄不存在:

root@txp-virtual-machine:/home/txp# source test.sh
0

判斷字符串是否相等:

#!/bin/bash
if [ "abc" = "abc" ]
then echo "equal"
else
echo "not equal"
fi

演示結果:

root@txp-virtual-machine:/home/txp# source test.sh
equal

用"-o"來演示邏輯或的使用:

#!/bin/bash
if [ 12 -eq 12 -o "abc" = "abc" ]
then echo "yes"
else
echo "not"
fi

演示結果:

root@txp-virtual-machine:/home/txp# source test.sh
yes

判斷字符串是否為空:

#!/bin/bash
str=""
[ -z $str ] && echo "yes"

演示結果:

root@txp-virtual-machine:/home/txp# source test.sh
yes

四、總結:

限于篇幅原因,暫時就沒有寫for和while等循環結構了,而且上面注意一個地方就是在往[]里面寫判斷語句的時候,注意左右兩邊要有空格,同時if語句的多分支結構我沒有舉例子,因為這和c語言里一樣,只是說書寫形式稍微有點不一樣,下一篇文章繼續分享。如果有想深入學習shell編程的網友,可以在公眾臺回復shell,就有兩份shell電子書免費送給大家,希望對大家在學習上有幫助。

如果各位喜歡的我的文章,可以在下方點個在看(或者轉發也行),你的支持,就是我寫文分享最大的動力,感謝您的支持。不忘初心,方得始終。

往期文章:

linux之shell編程(一)

Linux內核學習(一)之Linux內核源碼目錄

歡迎留言交流

總結

以上是生活随笔為你收集整理的eq linux_linux之shell编程(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。