shell 中的基本運算

2021-10-24 08:44:59 字數 2222 閱讀 1323

shell 支援多種運算子,包括:

#!/bin/bash

a=12

# 加法

b=$(($a+4))

echo "兩數之和為: $b"

兩數之和為: 16

# -,*,/,%(取餘)類似

使用expr,bc,awk等

expr 是一款表示式計算工具,使用它能完成表示式的求值操作。

注意:使用expr 時,表示式和運算子之間要有空格

# 反引號`` 中為可執行的shell命令,其結果可賦值給變數

b=`expr $a + 4`

b=`expr 10 \* 2`

# 乘號(*)前邊必須加反斜槓(\)才能實現乘法運算;

# expr不支援浮點除法,可以用bc 或 awk實現

num3=`echo "scale=2; $num1/$num2" | bc`

# sclae控制小數點後保留幾位

echo "$num1 $num2" | awk ''

# 百分數

num3=$(echo "$num1 $num2" | awk '')

判斷相等

a=10

b=20

if [ $a == $b ]

then

echo "a 等於 b"fi

if [ $a != $b ]

then

echo "a 不等於 b"

fi

只支援數字,不支援字串,除非字串的值是數字。

-eq 	檢測兩個數是否相等,相等返回 true,不相等返回 false。

-ne 是否不相等

-gt >

-lt <

-ge >=

-le <=

a=10

b=20

! 非運算,表示式為 true 則返回 false。 [ ! false ] 返回 true。

-o 或運算(or) [ $a -lt 20 -o $b -gt 100 ] 返回 true。

-a 與運算(and) [ $a -lt 20 -a $b -gt 100 ] 返回 false。

a=10

b=20

&& 邏輯的 and [[ $a -lt 100 && $b -gt 100 ]] 返回 false

|| 邏輯的 or [[ $a -lt 100 || $b -gt 100 ]] 返回 true

假定變數 a 為 "abc",變數 b 為 "efg":

= 	檢測兩個字串是否相等,相等返回 true。 	[ "$a" = "$b" ] 返回 false。

!= 是否不相等 [ "$a" != "$b" ] 返回 true。

-z 檢測字串長度是否為0,為0返回 true。 [ -z "$a" ] 返回 false。

-n 是否不為0 [ -n "$a" ] 返回 true。

$ 檢測字串是否為空,不為空返回 true。 [ "$a" ] 返回 true。

變數最好用「」括起來,防止變數內部有空格,導致錯誤

file 表示檔案/var/zz/test.sh

-d file 	檢測檔案是否是目錄,如果是,則返回 true。 	

-f file 檢測檔案是否是普通檔案(既不是目錄,也不是裝置檔案),如果是,則返回true。

-r file 檢測檔案是否可讀

-w file 是否可寫

-x file 是否可執行

-s file 是否為空(檔案大小是否大於0),不為空返回 true。

-e file 檢測檔案(包括目錄)是否存在,如果是,則返回 true。

[ -e $file ] 返回 true。

example: 檢測aa.txt是否存在,存在則輸出『exist』

test -e aa.txt && echo 'exist' || echo 'not exist!'

Linux中shell基本運算

shell程式中的操作預設都是字串操作,在要執行數 算符的時候可能得到意想不到的答案 var 1 var var 1 echo var output 1 1從這個例子中可以看出shell字串連線的操作,需要注意的是空格。在shell中可以使用let來指示下面是算術表示式,let表示式內變數不用加 v...

shell 基本運算

整數運算 a 4b 5 c a b 你以為這樣的結果是9嗎?echo c 4 5 shell預設都是字串操作的,所以得到的才是4 5,而不是9,怎麼搞?1.加點料 用這個把這個表示式括起來 c a b 這裡不需要用 引用了 echo c 9 或者更簡單的寫法 echo a b 2.用let語句 le...

shell 基本運算

root 41157cff18cd workspace expr 2 4 運算子中間由空格 6root 41157cff18cd workspace expr 2 4 2root 41157cff18cd workspace expr 2 4 號前要加轉義符,否則syntax error 8root...