當前位置:首頁 » 編程軟體 » shell腳本或運算

shell腳本或運算

發布時間: 2022-12-10 08:06:44

『壹』 shell腳本實現邏輯關系與、或、非

1,與 "-a" : a是and

if [ 條件1 -a 條件2 ] ;then

shell order

shell order

...

fi

2, 或 "-o" : o 是or

if [ 條件1 -o 條件2 ] ;then

shell order

shell order

...

fi

3,非 "!" : !是not

if [ ! 條件 ] ;then

shell order

shell order

...

fi

『貳』 在linux下shell腳本中if中用到or怎麼寫

linux下shell腳本的邏輯的or用運算符 || 表示,if中用到or的寫法實例如下:

a=10

b=20

if[[$a-lt 50||$b-gt 50]]

then

echo"返回 true"

else

echo"返回 false"

fi

其中$a-lt100表示a<50 為真;$b-gt 50 表示b>50為假;真 or 假為真。

所以輸出結果為:返回 true


(2)shell腳本或運算擴展閱讀

1、shell中流程式控制制if基本語法介紹:

if condition

then

command1

command2 ...

commandN

fi


2、shell中的另一個邏輯運算符and (&&)用法實例介紹:

a=10

b=20

if[[$a-lt100&&$b-gt100]]

then

echo"返回 true"

else

echo"返回 false"

fi

輸出結果為:返回 false

『叄』 請教一個shell腳本的問題 「或」怎麼表示


if["$a"=="A"-o"$a"=="B"];then
:
fi

或者

if["$a"=="A"]||["$a"=="B"];then
:
fi

『肆』 shell腳本書寫方法

在shell學習過程中,感覺挺有用的一份比較,略整理分享給大家。

首先,shell的作用

用戶的登陸shell 登陸後默認的shell程序是: /bin/bash

不同的shell內部指令,運行環境會有所區別

常見的shell有

/bin/sh

/bin/bash

/sbin/nologin

1.編寫腳本代碼:

使用vi編輯器,每行一條Linux命令,按照順序執行

2.然後賦予腳本文件可執行的屬性

3.執行腳本文件的三種方法

./chao.sh

sh /chao.sh

source /chao.sh

更完善的腳本構成

注釋信息

可執行語句

重定向操作

類型 操作符 用途

重定向輸入 < 從指定文件讀取而不是從鍵盤輸入

重定向輸出 > 將輸出文件保存到指定文件(覆蓋原有內容)

>> 將輸出文件保存到指定文件(覆蓋原有內容)

標准錯誤輸出 2> 將錯誤信息保存到指定的文件(覆蓋原有內容)

2>> 將錯誤信息保存到指定的文件

混合輸出 &> 將標准輸出,標准錯誤的內容保存到同一文件中

管道操作符號「|」

將左側的命令輸出結果,作為右側命令的處理對象

shell變數的作用

為靈活管理Linux系統提供的特定參數,有兩層意思

變數名:使用固定的名稱,由系統預設或用戶定義

變數值: 能夠根據用戶設置,系統環境的變化而變化

變數的類型

自定義變數:由用戶自己定義,修改和使用

環境變數: 由系統維護,用於設置工作環境

位置變數: 通過命令行給腳本程序傳遞參數

預定義變數:BASH中內置的一類變數,不能直接修改

定義一個新的變數

格式: 變數名=變數值

變數名以字母或下劃線開頭,區分大小寫,建議全大寫

查看變數的值: echo $變數名

賦值時使用引號:

雙引號:允許使用$符引用其他變數值

單引號: 禁止引用其他變數值,$視為普通字元

反撇號:命令替換,提取命令執行後的輸出結果

將鍵盤輸入內容為變數賦值

格式: read [-p "提示信息"] 變數名

設置變數的作用范圍

export 變數名

export 變數名=變數值

兩種格式可以混合使用

整數變數的運算:

expr 變數1 運算符 變數2 [運算符 變數3]

常見的運算符

加法運算符 +

減法運算符: -

乘法運算符:\*

除法運算符: /

取余運算:%

整數變數的運算(2)

((變數=變數運算符變數));

等號後面的變數可以是具體數值

例子:

((a=a+3));

環境變數:

由系統提前創建,用來設置用戶的工作環境

配置文件: /etc/profile ~/.bash_profile

常見環境變數的舉例

位置變數:

表示為$n, n為1~9之間的數字

預定義變數:

/etc/passwd /etc/shadow

例如一些服務的內置用戶名或密碼

如apache的啟動用戶就是預定義變數

條件測試操作

測試特定的 表達式是否成立,當條件成立時,測試語句的返回值為0,否則為其他數值

格式 : test 條件表達式

應用實例:

test -z 進行測試的時候 字元串長度為0的時候 結果才返回1

如果變數數值為0 返回0

條件測試操作

[ 操作符 文件或目錄]

[5] 部分是判斷表達式,-d表示判斷是否是目錄

&&是」邏輯與「操作符,只有&&前面的判斷成立,後面的語句才會執行

-b的意思是判斷 後面的路徑是否是一個目錄

echo $? 表示對剛剛執行的表達式進行判斷

0表示成立,1表示不成立

-e filename 如果 filename存在,則為真 [ -e /var/log/syslog ]

-d filename 如果 filename為目錄,則為真 [ -d /tmp/mydir ]

-f filename 如果 filename為常規文件,則為真 [ -f /usr/bin/grep ]

-L filename 如果 filename為符號鏈接,則為真 [ -L /usr/bin/grep ]

-r filename 如果 filename可讀,則為真 [ -r /var/log/syslog ]

-w filename 如果 filename可寫,則為真 [ -w /var/mytmp.txt ]

-x filename 如果 filename可執行,則為真 [ -L /usr/bin/grep ]

filename1-nt filename2 如果 filename1比 filename2新,則為真 [ /tmp/install/etc/services -nt /etc/services ]

filename1-ot filename2 如果 filename1比 filename2舊,則為真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]

字元串比較運算符 (請注意引號的使用,這是防止空格擾亂代碼的好方法)

-z string 如果 string長度為零,則為真 [ -z "$myvar" ]

-n string 如果 string長度非零,則為真 [ -n "$myvar" ]

string1= string2 如果 string1與 string2相同,則為真 [ "$myvar" = "one two three" ]

string1!= string2 如果 string1與 string2不同,則為真 [ "$myvar" != "one two three" ]

算術比較運算符

num1-eq num2 等於 [ 3 -eq $mynum ]

num1-ne num2 不等於 [ 3 -ne $mynum ]

num1-lt num2 小於 [ 3 -lt $mynum ]

num1-le num2 小於或等於 [ 3 -le $mynum ]

num1-gt num2 大於 [ 3 -gt $mynum ]

num1-ge num2 大於或等於 [ 3 -ge $mynum ]

整數值比較

格式: [ 整數1 操作符 整數2 ]

字元串比較

格式1: [ 字元串1 = 字元串2 ]

[ 字元串1 != 字元串2 ]

格式2: [ -z 字元串 ]

邏輯測試:

格式1: [ 表達式1 ] 操作符 [ 表達式2 ]

格式2: 命令1 操作符 命令2

if語句的結構

while語句的語法結構

『伍』 編寫Shell腳本---接受、判斷用戶參數

[TOC]

如果想查看當前所在工作路徑並列出當前目錄下所有的文件及屬性信息,實現這個功能的腳本如下:

Shell腳本文件的名稱可以任意,但為了避免被誤以為是普通文件,建議將 .sh 後綴加上,以表示是一個腳本文件
在上面的 example.sh 腳本中出現了三種不同的元素:

執行腳本有兩種方式:

各變數的作用:

用測試語句測試一個文件是否為目錄,然後通過 Shell 解釋器內設 $? 變數顯示上一條命令的返回值

在Shell終端中邏輯「與」的運算符號是 && ,它表示當前面的命令執行成功後才執行後面的命令

等號兩邊必須要有空格,才能進行邏輯等於

它表示把條件測試中的判斷結果取相反值

整數比較運算符僅對數字操作,且不能使用等號、大於號、小於號來判斷。因為等號與賦值命令符沖突,大於號和小於號分別與輸出重定向和輸入重定向命令符沖突。因此一定要使用規范的整數比較運算符進行操作。

示例:使用 free -m 命令查看內存使用量情況(單位MB),然後通過 grep Mem: 命令過濾出剩餘內存量的行,使用 awk'{print $4}' 命令只保留第四列,最後用 FreeMem=`語句` 的方式把語句內執行結果復制給變數

示例1 :判斷String變數是否為空,進而判斷是否定義了這個變數

示例2 :引入邏輯運算符,判斷語系LANG

『陸』 shell腳本主要有哪些

第一個shell腳本程序:

#!/bin/bash
# 上面中的 #! 是一種約定標記, 它可以告訴系統這個腳本需要什麼樣的解釋器來執行;echo "Hello, world!"

變數:

定義變數:

country="China"Number=100

注意: 1,變數名和等號之間不能有空格;

2,首個字元必須為字母(a-z,A-Z)。

3, 中間不能有空格,可以使用下劃線(_)。

4, 不能使用標點符號。

5, 不能使用bash里的關鍵字(可用help命令查看保留關鍵字)。

使用變數:

只需要在一個定義過的變數前面加上美元符號$就可以了, 另外,對於變數的{} 是可以選擇的, 它的目的為幫助解釋器識別變數的邊界.

country="China"echo $countryecho ${country}echo "I love my ${country}abcd!"

#這個需要有{}的;

重定義變數:直接把變數重新像開始定義的那樣子賦值就可以了:

country="China"country="ribenguizi"

只讀變數: 用 readonly 命令 可以把變數字義為只讀變數。

readonly country="China"#或
country="China"readonly country

刪除變數: 使用unset命令可以刪除變數,但是不能刪除只讀的變數。用法:

unset variable_name

變數類型

運行shell時,會同時存在三種變數:

1) 局部變數

局部變數在腳本或命令中定義,僅在當前shell實例中有效,其他shell啟動的程序不能訪問局部變數。

2) 環境變數

所有的程序,包括shell啟動的程序,都能訪問環境變數,有些程序需要環境變數來保證其正常運行。必要的時候shell腳本也可以定義環境變數。

3) shell變數

shell變數是由shell程序設置的特殊變數。shell變數中有一部分是環境變數,有一部分是局部變數,這些變數保證了shell的正常運行

特殊變數:

其中, 1. 取值後面必須為關鍵字 in,每一模式必須以右括弧結束。取值可以為變數或常數。匹配發現取值符合某一模式後,其間所有命令開始執行直至 ;;。;; 與其他語言中的 break 類似,意思是跳到整個 case 語句的最後。2. 如果無一匹配模式,使用星號 * 捕獲該值,再執行後面的命令。

『柒』 shell中如何按位運算

語法
$((...))

$ echo $(( 3 * 4 )) 12

在某些場景特別方便,可以免去寫程序的煩瑣,如驗證某些運算。
下面是驗證《深入理解計算系統》練習題2.12的場景

表達式 ~0 將生成一個全1的掩碼,不管機器的字大小是多少,可移植。

$ printf "%x\n" $(( ~0 ))ffffffffffffffff
$ printf "%#x\n" $(( ~0 ))0xffffffffffffffff

上面的測試顯示,shell中,0按位取反後的值是64位的。
shell的printf命令前導字元列印:《shell腳本學習指南》表7-4:printf的標志中描述了格式參數中"#"號的意義,"#"可以用以輸出前導"0x"(16進制)、"0"(8進制)

x & 0xFF 生成一個由x的最低有效位元組組成的值
$ printf "%#x\n" $(( 0x89ABCDEF & 0xFF ))0xef
$ printf "%#.8x\n" $(( 0x89ABCDEF & 0xFF ))0x000000ef

以下x = 0x87654321
A.x的最低有效位元組,其他位均置為0
$ printf "%#.8x\n" $(( 0x87654321 & 0xFF )) 0x00000021
$ printf "%#.8x\n" $(( 0x87654321 & ?0xFF ))-bash: 0x87654321 & ?0xFF : syntax error: operand expected (error token is "?0xFF ")
書中給出的練習題的答案是 「x & ?0xFF」,這里的"?"號經驗證,shell無法正確運行。

B.除了x的最低有效位元組外,其他的位置都取補,最低有效位元組保持不變。
$ printf "%#x" $(( 0x87654321 ^ ~0xff))0xffffffff789abc21

上面因為~0xff會生成64位的掩碼,所以結果有些不符合預期,但後32位是符合預期的。
C.x的最低有效位元組設置成全1,其他位元組都保持不變。
$ printf "%#x" $(( 0x87654321 | 0xff ))0x876543ff

『捌』 shell腳本計算時間

TIME_INPUT=`date -d "00:00" +%s`
通過時間戳來計算
nowtime=`date +%s`
shijiancha=`expr $nowtime - $TIME_INPUT`
if [ $shijiancha -gt 180 ];then
echo 3分鍾前

else
if [ $shijiancha -lt -180 ];then

echo 3分鍾後

fi

fi

『玖』 如何運行shell腳本

編寫好的shell腳本(如:test),可以採取兩種方式進行運行: 一、 $ sh test 一般不採用這種調用方式,尤其不採用「sh<test」的調用方式,因為這種方式將禁止shell讀取標准輸入。 也可以採用 $ ksh test 這種方式要求shell具有「可讀」的訪問許可權。 二、直接運行可執行的shell腳本之前,首先應使用下列chmod命令,把shell腳本文件設置為可執行的文件。 chmod 755 test(除文件屬主可寫之外,每個用戶均具有讀和可執行的訪問許可權) chmod +rx test(同上) chmod u+rx test(只有文件屬主具有讀和執行的訪問許可權) 按照上述要求設置shell腳本文件的訪問許可權後,可採用下列方式,直接運行shell腳本了。 1、test(如果命令檢索路徑包含當前目錄) 2、./test(如果命令減縮路徑不包含當前目錄) *說明: sh test 方式調用一個shell叫蹦可能會禁止某些shell特定的擴展功能,因而可能引起腳本無法正確執行。

『拾』 Shell基礎腳本-運算符優先順序

在腳本中,運算執行的順序被稱為優先順序: 高優先順序的操作會比低優先順序的操作先執行
表-1. 運算符優先順序(從高到低)

實際上,你只需要記住以下規則就可以了:

現在,讓我們利用運算符優先順序的知識來分析一下Fedora Core Linux中的/etc/init.d/functions文件。

為了避免在復雜比較運算中的錯誤,可以把運算分散到幾個括弧結構中

熱點內容
飢荒伺服器搭建視頻 發布:2025-07-04 21:48:38 瀏覽:523
github上傳文件夾 發布:2025-07-04 21:29:22 瀏覽:1003
php課程學習中心 發布:2025-07-04 21:29:16 瀏覽:298
win7加密文件夾如何解密 發布:2025-07-04 21:25:24 瀏覽:555
為啥系統緩存的垃圾多呢 發布:2025-07-04 21:15:45 瀏覽:952
linux路由伺服器 發布:2025-07-04 21:13:57 瀏覽:7
為什麼藍牙配對還要發送密碼呢 發布:2025-07-04 21:12:49 瀏覽:621
伺服器無硬體是什麼意思 發布:2025-07-04 21:01:57 瀏覽:763
存儲伺服器的硬碟如何格式化 發布:2025-07-04 20:59:54 瀏覽:115
聯想伺服器的bmc叫什麼 發布:2025-07-04 20:52:29 瀏覽:818