10_Linux基礎-SHELL入門1

来源:https://www.cnblogs.com/mycpen/archive/2022/09/02/16650976.html
-Advertisement-
Play Games

10_Linux基礎-SHELL入門1 一. 輸入輸出重定向 回顧1 輸入輸出重定向 輸入 read -p “請輸入” a -p 提示 a 賦值給a read -s 密碼隱藏 輸出 echo \# echo -e “abc\t abc” 轉義字元輸出 abc abc \# echo “abc\t a ...


10_Linux基礎-SHELL入門1


一. 輸入輸出重定向

回顧1 輸入輸出重定向

輸入

read -p “請輸入” a -p 提示 a 賦值給a

read -s 密碼隱藏

---------------------------------------------------------------

輸出

	echo

	\# echo -e “abc\t abc”	轉義字元輸出

	abc		abc

	\# echo “abc\t abc”

	abc\t abc

echo -n 不接換行

echo -e 轉義字元輸出


二. 2個特殊文件

知識點2 2個特殊文件

兩個特殊文件

·/dev/null:過濾標準錯誤信息

·/dev/zero:用來創建指定長度文件

/dev/null:黑洞文件,不保存,不輸出的信息,就丟到黑洞文件

/dev/zero:用來生成指定大小的文件,生成一堆0


示例:/dev/zero:用來生成指定大小的文件,生成一堆0

/dev/zero一般用作生成指定大小的文件,做測試用

dd是一個備份命令,也可以產生一個指定大小的文件

if 輸入文件 input file

of 輸出文件 output file

bs 輸出的數據的單位大小

count 輸出的數據單位數量

示例:_______________________________________________________

[root@sanchuang-linux dev]# dd if=/dev/zero of=/tmp/test.dd bs=1M count=5
記錄了5+0 的讀入
記錄了5+0 的寫出
5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.00196718 s, 2.7 GB/s
[root@sanchuang-linux dev]# du -sh /tmp/test.dd 
5.0M	/tmp/test.dd
if 從哪裡導進來 , of 導出去這個文件 , bs 數據單位大小  , count數據單位數量

三. here document

知識點3 here document

here document 文檔就在這裡

<<

生成一個指定內容的文檔。

簡單腳本中使用

示例:

-----------------------------------------------------------

[root@sanchuang-linux chenpeng]# cat >here_test.txt <<EOF
> nihao
> sanchuang
> huanying
> world............
> x y z
\> EOF
[root@sanchuang-linux chenpeng]# cat here_test.txt
nihao
sanchuang
huanying
world............
x y z


知識點3.2 EOF是文檔結束標誌 可以自行定義 (end of file)

示例:

------------------------------------------------------

[root@sanchuang-linux chenpeng]# cat >here_test <<XYZ
> nihao
> hello world
> XYZ
[root@sanchuang-linux chenpeng]# cat here_test
nihao
hello world


四. tee命令

知識點4 tee命令

tee命令 輸出到屏幕也重定向到文件

示例:

----------------------------------

[root@sanchuang-linux chenpeng]# echo "aa" >test_aa.txt #(註:預設不輸出到屏幕)
[root@sanchuang-linux chenpeng]# cat test_aa.txt
aa
[root@sanchuang-linux chenpeng]# echo "bb" |tee test_bb.txt #(註:屏幕+文件)
bb
[root@sanchuang-linux chenpeng]# cat test_bb.txt
bb


五. 清空文件內容

知識點5 清空文件內容

[root@sanchuang-linux chenpeng]# >test_bb.txt
[root@sanchuang-linux chenpeng]# echo > test_bb.txt #(註:有換行)
[root@sanchuang-linux chenpeng]# cat test_bb.txt

[root@sanchuang-linux chenpeng]# echo -n > test_bb.txt
[root@sanchuang-linux chenpeng]# cat test_bb.txt
[root@sanchuang-linux chenpeng]# :>test_bb.txt
[root@sanchuang-linux chenpeng]# cat test_bb.txt


知識點6 echo

echo

在屏幕上顯示一段文字或指定內容

輸出變數,輸出指定內容

-e 選項 轉義字元輸出

-n 選項 不接換行


六. SHELL入門

shell入門

shell 是一個用C語言寫的程式,它是用戶使用linux的橋梁

shell 腳本 實現自動化 重覆性的操作編寫腳本完成,減少人工失誤


SHELL的變數

shell的變數

1、局部變數 定義在腳本或命令中

2、環境變數 shell啟動的程式能訪問到的環境變數 env、 echo $PATH

3、shell變數

示例:環境變數
------------------------------------------
[root@sanchuang-linux chenpeng]# which ls
alias ls='ls --color=auto'
	/usr/bin/ls							#(註:環境變數)
[root@sanchuang-linux chenpeng]# echo $PATH	#(註:環境變數)
/lianxi/sc:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/nginx/sbin:/root/bin:/usr/local/nginx5/sbin:/root/bin
示例2:局部變數
-------------------------------------------
a=1
echo $a
echo ${a}

知識點8.2 變數名命名規則

變數名命名規則:

由數字、字母、下劃線組合,不能以數字開頭

不能使用bash中的關鍵字

使用一個定義過的變數,需要在前面加上$符號

示例:
--------------------------------------------
[root@sanchuang-linux chenpeng]# echo $PATH		#(註:環境變數)
/lianxi/sc:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/nginx/sbin:/root/bin:/usr/local/nginx5/sbin:/root/bin

SHELL接收參數

知識點9 shell接收參數

shell接收

位置變數 :$1 - $9 ,分別代表參數列表中的 第1 - 9 個參數

可以重覆使用(即腳本里可以出現兩個$1)


預定義變數,系統預留的一些變數:

$0 當前進程 或者 腳本名稱

$! 後臺運行的最後一個進程的pid號

$? 上一條命令程式返回值

$* 代表所有參數內容

$$ 表示當前進程pid號

$# 表示參數個數

$@ 代表所有參數(逐個提取)


# perror 1

查看命令的返回值,並且看返回值的具體含義

$? 命令返回值為0 表示正常執行

	不為0 都表示運行錯誤
示例如下:__________________________________
[root@mysql-binary shell_test]# echo $?
1
[root@mysql-binary shell_test]# perror 1
OS error code   1:  Operation not permitted

#!/bin/bash 腳本前最好加上這一行,預設使用什麼解釋器去執行

原因:類unix操作系統,unbuntu、debian、centos每個操作系統的預設bash可能不一樣


示例1:位置變數$1、$2 __________________________________

[root@sanchuang-linux shell_test]# cat canshu.sh
#!/bin/bash

echo "########這是$1########" #(註:位置變數)
echo "$1" #(註:位置變數)
echo "########這是$2########" #(註:位置變數)
echo "$2" #(註:位置變數)
[root@sanchuang-linux shell_test]# sh canshu.sh "hello" "world" #(註:傳了2個參數)
########這是hello######## #(註:參數1)
hello
########這是world######## #(註:參數2)
world


示例2:預定義變數 $0__________________________________________________________

[root@sanchuang-linux shell_test]# echo $0	#(註:$0 當前進程 或者 腳本名稱)
-bash
[root@sanchuang-linux shell_test]# sh canshu.sh "hello" "world"
########這是hello########
hello
########這是world########
world
canshu.sh									#(註:$0 當前進程 或者 腳本名稱)
[root@sanchuang-linux shell_test]# cat canshu.sh 
#!/bin/bash

echo "########這是$1########"
echo "$1"
echo "########這是$2########"
echo "$2"

echo "$0"

示例3:預定義變數 $* $# $@_____________________

[root@sanchuang-linux shell_test]# vim canshu.sh
#!/bin/bash

echo "########這是$1########"
echo "$1"
echo "########這是$2########"
echo "$2"
echo "$0"

echo "這是所有:$*"			#(註:$* 代表所有參數內容)
echo "參數#:$#"			#(註:$# 表示參數個數)
echo "這是@:$@"			#(註:$@ 代表所有參數(逐個提取))
──────────────────────────────────────────────
[root@sanchuang-linux shell_test]# sh canshu.sh hello world 2020	  #(註:3個參數)
########這是hello########
hello
########這是world########
world
canshu.sh
這是所有:hello world 2020
參數#:3
這是@:hello world 2020

知識點10 python中接收參數 sys模塊

python中

sys模塊裡面的argv屬性。python後面 傳過來的參數是一個列表,然後獲取第一個第二個

[root@sanchuang-linux ~]# vim canshu.py
import sys

print(sys.argv[1],sys.argv[2])		#(註:1接收參數1,2接收參數2)
print(sys.argv[0])					#(註:0是文件名)
----------------------------------------------------------------------
[root@sanchuang-linux ~]# python3 canshu.py "hello" "world"
hello world
canshu.py

數據類型

知識點11 數據類型

shell常用數字、字元串、數組

字元串的定義,可以使用單引號,也可以使用雙引號,也可以不用引號

示例:字元串的定義__________________
[root@sanchuang-linux ~]# echo abc
abc
[root@sanchuang-linux ~]# a=b
[root@sanchuang-linux ~]# echo $a
b
[root@sanchuang-linux ~]# a="b"
[root@sanchuang-linux ~]# echo $a
b
[root@sanchuang-linux ~]# a='b'
[root@sanchuang-linux ~]# echo $a
b

示例:數字的定義_________________
[root@sanchuang-linux ~]# a=1
[root@sanchuang-linux ~]# a=2

引號區別

知識點12 引號區別:雙引號可以識別變數,單引號不可以識別變數

引號區別:雙引號可以識別變數,單引號不可以

[root@sanchuang-linux ~]# head -n1 /etc/passwd			#(註:輸出passwd第一條)
root:x:0:0:root:/root:/bin/bash
[root@sanchuang-linux ~]# cat /etc/passwd |head -n1		#(註:不建議用這個 2條命令)
root:x:0:0:root:/root:/bin/bash
#!/bin/bash

# 字元串操作
line=`head -n1 /etc/passwd`		#(註:使用反引號``)(註:把命令輸出保存在line裡面)
echo $line
---------------------------------------------------------------------------------
[root@sanchuang-linux chenpeng]# bash test2.sh 
root:x:0:0:root:/root:/bin/bash

示例:雙引號可以識別變數,單引號不可以識別變數_____________________________

echo "字元串為:$line"
字元串為:root:x:0:0:root:/root:/bin/bash
------------------------------------------
echo '字元串為:$line'
字元串為:$line

字元串操作

知識點13 字元串操作

截取
截取前4個字元:echo ${line:0:4}
截取後9個字元  echo ${line:0-9}
從倒數第九個字元開始截取4個字元 echo ${line:0-9:4}
從左向右截取最後一個:後的字元   echo ${line##*:}
從左向右截取第一個:後的字元     echo ${line#*:}
從右往左截取最後一個:後的字元	echo ${line%%:*}
從右向左截取第一個:後的字元	echo ${line%:*}
字元串長度	echo ${#line}
示例:字元串操作_______________________________
# 字元串操作
[root@sanchuang-linux chenpeng]# vim test2.sh
line=`head -n1 /etc/passwd`
echo $line				#(註:root:x:0:0:root:/root:/bin/bash)
echo "字元串為:$line"		#(註:字元串為:root:x:0:0:root:/root:/bin/bash)

echo '字元串為:$line'		#(註:字元串為:$line)

echo "截取前4個字元:"
echo ${line:0:4}			#(註:root)

echo "截取後9個字元"
echo ${line:0-9}			#(註:/bin/bash)

echo "從倒數第九個字元開始截取4個字元"
echo ${line:0-9:4}			#(註:/bin)

echo "從左向右截取最後一個:後的字元"
echo ${line##*:}			#(註:/bin/bash)

echo "從左向右截取第一個:後的字元"
echo ${line#*:}			#(註:x:0:0:root:/root:/bin/bash)

echo "從右往左截取最後一個:後的字元"
echo ${line%%:*}			#(註:root)

echo "從右向左截取第一個:後的字元"
echo ${line%:*}			#(註:root:x:0:0:root:/root)

echo "字元串長度"
echo ${#line}				#(註:31)
-----------------------------------------------
[root@sanchuang-linux chenpeng]# bash test2.sh 
root:x:0:0:root:/root:/bin/bash
字元串為:root:x:0:0:root:/root:/bin/bash
字元串為:$line
截取前4個字元:
root
截取後9個字元
/bin/bash
從倒數第九個字元開始截取4個字元
/bin
從左向右截取最後一個:後的字元
/bin/bash
從左向右截取第一個:後的字元
x:0:0:root:/root:/bin/bash
從右往左截取最後一個:後的字元
root
從右向左截取第一個:後的字元
root:x:0:0:root:/root
字元串長度
31

練習13 截取百度網址

line="http://www.baidu.com/login"

# 截取出:login
echo ${line:0-5}				#(註:取最後5個字元)
echo ${line##*/}				#(註:從左往右最後一個/後的內容)

# 截取出:www.baidu.com/login
echo ${line##*//}

# 截取出:http://www.baidu.com
echo ${line%/*}

# 截取出:http:
echo ${line%%/*}

數值的運算與比較

知識點14 數值的運算與比較

數值的運算:
第一種: $(( 表達式 ))
第二種: $[ 表達式 ]
第三種: expr 表達式

註意表達式運算符左右空格

示例:↓↓↓↓↓↓↓↓↓↓↓↓↓↓
[root@sanchuang-linux ~]# a=10
[root@sanchuang-linux ~]# b=20
[root@sanchuang-linux ~]# $(($a + $b))
-bash: 30: 未找到命令
[root@sanchuang-linux ~]# echo $(($a + $b))
30
[root@sanchuang-linux ~]# echo $[ $a +$b ]
30
[root@sanchuang-linux ~]# expr $a + $b
30
[root@sanchuang-linux ~]# expr $a+$b
10+20

SHELL結構語句,迴圈和判斷

知識點15 shell結構語句,迴圈和判斷

知識點15.1 for迴圈

for迴圈

語法1:↓↓↓↓↓↓↓↓
-----------------------
for 變數 in 值1 值2
do
	迴圈執行語句
done
=======================================
語法2:↓↓↓↓↓↓↓
---------------------------------------
# for ((i=0;i<3;i++))
for ((初始化變數; 結束迴圈的條件; 運算))
do 
	迴圈執行的語句
done

知識點15.2 while迴圈

While迴圈

語法1:↓↓↓↓↓
---------------------------------------
while read line
do 
	迴圈執行語句
done
=======================================
語法2↓↓↓↓↓↓↓↓↓
---------------------------------------
while [條件(非必選)]:
do
	迴圈執行語句
done
=======================================
註:也支持break,continue

知識點15 判斷

知識點15.3 if語句

if語句

語法1:↓↓↓↓↓
-------------------------
if 條件
then
	執行語句
fi
=========================
語法2:↓↓↓↓↓
if 條件
then
	執行語句
else
	執行語句
fi
==========================
語法3:↓↓↓↓↓↓
----------------------
if [ command ];then
符合該條件執行的語句
elif [ command ];then
符合該條件執行的語句
else
符合該條件執行的語句
fi

知識點15.4 case語句

case語句

語法:↓↓↓↓↓________________
case $變數名 in
條件1)
	執行語句一
	;;
條件2)
	執行語句二
	;;
*)
esac

練習16

編寫一個shell腳本

接收用戶輸入的兩個數,然後選擇要對著兩個數進行什麼計算,並且輸出結果

實現菜單選擇

================

  1. add 加法

  2. sub 減法

  3. mul 乘法

  4. exit 退出

================

註:菜單選擇用case、服務重啟腳本用case

示例:↓↓↓↓↓↓↓↓↓_________________________
[root@sanchuang-linux chenpeng]# vim num_test.sh
#!/bin/bash

read -p "請輸入數字一:" num1
read -p "請輸入數字二:" num2

echo "================"
echo "1.add 加法"
echo "2.sub 減法"
echo "3.mul 乘法"
echo "4.exit 退出"
echo "================"

read -p "請輸入你的選擇:" options
case $options in
1)
    echo "兩數相加為:$(($num1 + $num2))"
    ;;
2)
    echo "兩數相減為:$(($num1 - $num2))"
    ;;
3)
    echo "兩數相乘為:$(($num1 * $num2))"
    ;;
4)
    echo "退出!"
    exit
esac
-------------------------------------------------------------------------------------------
整成函數形式
add(){
    echo "兩數相加為:$(($num1 + $num2))"
}

case $options in
1)
    add			#(註:需要使用的時候調用)
    ;;
2)…………………………

/etc/init.d 服務的啟動腳本

知識點17 /etc/init.d 服務的啟動腳本

/etc/init.d/ 放著服務的啟動腳本

[root@sanchuang-linux chenpeng]# cd /etc/init.d/              
[root@sanchuang-linux init.d]# ls                             
functions  README           
示例:服務重啟腳本用case↓↓↓↓↓__________________
case $mode in
	start)
		啟動
		;;
	stop)
		關閉(使用kill命令)
		;;
	restart)
		關閉
		啟動
		;;
	reload)
		重新載入配置(使用kill -HUP)
		;;
esac            

kill

知識點18 kill

kill 用來刪除正在執行中的程式或者工作
kill 可以將指定的信息發送給程式

# kill -l 可以查看kill信號量	(kill -L(小寫))
# kill -0 用來檢測進程是否存在,當進程不存在時,kill -0 會報錯
# kill -1 pid 重新載入進程(常用)
# kill -HUP pid 和  kill -1 pid是一樣的
# kill -1 pid  或者  kill -HUP pid  都表示重新載入這個文件
# kill -9 強制殺死
# kill -15 正常停止一個進程
kill 不接信號量的時候,預設為信號15
除了9號信號,其他信號進程都有權利拒絕執行!

註:重新載入 相當於 載入最新的配置 服務還是正常運行的(連接不會斷)

	重啟 服務會斷
示例:↓↓↓↓↓↓↓↓↓____________
[root@sanchuang-linux ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
…………………………
63) SIGRTMAX-1	64) SIGRTMAX	

SHELL編程 if判斷

知識點19 shell編程 if判斷

if 判斷

示例:↓↓↓↓↓↓____________________________________________________________
[root@sanchuang-linux ~]# if id wenyao; then echo "ok"; else echo "error"; fi
id: “wenyao”:無此用戶
error
--------------------------------------------------------
等同於:↓↓↓↓↓________________________________________________
if id wenyao; 
then 
	echo "ok"; 
else 
	echo "error"; 
fi

[ ]

知識點20 [ ]

[ ]表示條件測試

註意這裡的空格很重要。要註意在'['後面和']'前面都必須要有空格。


常用判斷:
[ -d FILE ] 如果 FILE 存在且是一個目錄則返回為真。
[ -f FILE ] 如果 FILE 存在且是一個普通文件則返回為真。
[ -e **** ] 判斷文件/文件夾是否存在

字元串判斷:
[ -z STRING ] 如果STRING的長度為零則返回為真,即空是真
[ -n STRING ] 如果STRING的長度非零則返回為真,即非空是真
[ STRING1 ]  如果字元串不為空則返回為真,與-n類似
[ STRING1 == STRING2 ] 如果兩個字元串相同則返回為真
[ STRING1 != STRING2 ] 如果字元串不相同則返回為真
[ STRING1 < STRING2 ] 如果 “STRING1”字典排序在“STRING2”前面則返回為真。
[ STRING1 > STRING2 ] 如果 “STRING1”字典排序在“STRING2”後面則返回為真。

數值判斷
[ INT1 -eq INT2 ] INT1和INT2兩數相等返回為真 ,=
[ INT1 -ne INT2 ] INT1和INT2兩數不等返回為真 ,<>
[ INT1 -gt INT2 ] INT1大於INT2返回為真 ,>
[ INT1 -ge INT2 ] INT1大於等於INT2返回為真,>=
[ INT1 -lt INT2 ] INT1小於INT2返回為真 ,<
[ INT1 -le INT2 ] INT1小於等於INT2返回為真,<=

邏輯判斷
[ ! EXPR ] 邏輯非,如果 EXPR 是false則返回為真。
[ EXPR1 -a EXPR2 ] 邏輯與,如果 EXPR1 and EXPR2 全真則返回為真。
[ EXPR1 -o EXPR2 ] 邏輯或,如果 EXPR1 或者 EXPR2 為真則返回為真。
[ ] || [ ] 用OR來合併兩個條件
[ ] && [ ] 用AND來合併兩個條件

示例:↓↓↓↓↓↓↓↓↓↓↓↓↓
[root@sanchuang-linux ~]# a=10
[root@sanchuang-linux ~]# b=20
[root@sanchuang-linux ~]# if [ $a -gt $b ];then echo "a>b";else echo "a<b";fi	#(註:正確)
a<b
[root@sanchuang-linux ~]# if [ $a > $b ];then echo "a>b";else echo "a<b";fi	#(註:出錯)
a>b						(註:使用2個中括弧不出錯)
[root@sanchuang-linux ~]# if [[ $a > $b ]];then echo "a>b";else echo "a<b";fi	#(註:正確)
a<b

[root@sanchuang-linux ~]# if [ $a -gt $b ] && [ $a -ne 20 ];then echo "輸出a>b";else echo "輸出a<b";fi
輸出a<b

練習21

判斷當前目錄下是否存在文件a,沒有的話就創建

有的話輸出,輸出文件已存在

示例:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
寫法1:
if [ -f a.txt ];
    then echo "文件存在"
else
    touch a.txt
fi
-------------------------------------------------
寫法2:推薦(類似python的if三元運算符)
[ -f a.txt ] && echo "文件已存在" || touch a.txt

示例2:

編寫一個腳本,實現如下功能

==============

1.增加用戶並設置密碼

2.刪除用戶

3.查看用戶

4.退出

==============

輸入的指定不是1-4,給提示給予提醒,並且如果不輸入退出的話,可以迴圈添加。

按1 增加用戶,並且設置密碼 useradd passwd

按2 刪除用戶 userdel -r

按3 查看用戶 id

按4 退出 exit


&& ||

知識點22 類似python的if三元運算符

使用&& || 來實現

·cmd1 && cmd2 如果cmd1執行成 功,或者為真,則執行cmd2

·cmd1 || cmd2 如果cmd1執行不成功,或者為假,則執行cmd2

·cmd1 && cmd2 || cmd3 如果cmd1執行成功,就執行cmd2,不成功就執行cmd3

示例:上個練習↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
[ -f a.txt ] && echo "文件已存在" || touch a.txt
[[ -f a.txt ]] && echo "文件已存在" || touch a.txt		#(註:推薦使用兩個中括弧)

示例:
-------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# a=10
[root@sanchuang-linux ~]# b=20
[root@sanchuang-linux ~]# [ $a -gt $b ] && echo "輸出 a>b"
[root@sanchuang-linux ~]# [ $a -gt $b ] || echo "輸出 a<b"
輸出 a<b
[root@sanchuang-linux ~]# [ $a -gt $b ] && echo "輸出 a>b" || echo "輸出 a<b"
輸出 a<b

[] 、[[]]、 (()) (判斷方式)

知識點23 [] 、[[]]、 (()) (判斷方式)

[ ] 會做單詞拆分
[ ] 很多表示都不是很支持,建議使用[[ ]]判斷(2個中括弧)
總結:
·建議使用[[ ]]來比較運算,進行判斷
·字元串用[[ ]] (推薦)
·數字用比較用(( ))
結論:建議使用[[ ]]來比較運算,進行判斷

示例1:if判斷時
-------------------------------------------------------------------------------------------
[root@sanchuang-linux chenpeng]# name="wen yao"
[root@sanchuang-linux chenpeng]# [ $name == "wen yao" ] && echo "ok" || echo "error"
-bash: [: 參數太多		#(註:自動做單詞拆分)
error
[root@sanchuang-linux chenpeng]# [[ $name == "wen yao" ]] && echo "ok" || echo "error"
ok							#(註:推薦使用2個中括弧)
[root@sanchuang-linux chenpeng]# [ "$name" == "wen yao" ] && echo "ok" || echo "error"
ok					#(註:使用引號連接在一起,表示一個整體)
============================================================================================

示例2:數值比較
-------------------------------------------------------------------------------------------
[root@mysql-binary shell_test]# echo $a
10
[root@mysql-binary shell_test]# echo $b
20
[root@mysql-binary shell_test]# [[ $a > $b ]] && echo "ok" || echo "error"
error
[root@mysql-binary shell_test]# [ $a > $b ] && echo "ok" || echo "error"
ok							#(註:出錯)
[root@mysql-binary shell_test]# (( $a == $b )) && echo "ok" || echo "error" 
error

示例:
--------------------------------------------------------------------------------------------
[root@mysql-binary shell_test]# a=10
[root@mysql-binary shell_test]# b=20
[root@mysql-binary shell_test]# [[ $a -eq $b ]] && echo "ok" || echo "eroor"
eroor
[root@mysql-binary shell_test]# (( $a -eq $b )) && echo "ok" || echo "eroor"
-bash: ((: 10 -eq 20 : 表達式中有語法錯誤 (錯誤符號是 "20 ")
Eroor
----------------------------------------------------------------------------
[root@mysql-binary shell_test]# c=102
[root@mysql-binary shell_test]# b=20
[root@mysql-binary shell_test]# [[ $c > $b ]] && echo "ok" || echo "eroor"
eroor
[root@mysql-binary shell_test]# (( $c > $b )) && echo "ok" || echo "eroor"
ok

示例3:if條件判斷的2種寫法
--------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# a=10
[root@sanchuang-linux ~]# b=20
[root@sanchuang-linux ~]# if [[ $a > $b ]]; then echo "ok"; else echo "error"; fi
error
[root@sanchuang-linux ~]# [[ $a > $b ]] && echo "ok" || echo "error"
error

示例:字元串比較(( ))  也可以
--------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# a=abc
[root@sanchuang-linux ~]# b=abc1
[root@sanchuang-linux ~]# (( $a > $b )) && echo "ok" || echo "error"
error
[root@sanchuang-linux ~]# a=abc
[root@sanchuang-linux ~]# b=bac1
[root@sanchuang-linux ~]# (( $a > $b )) && echo "ok" || echo "error"
error
[root@sanchuang-linux ~]# a=abc
[root@sanchuang-linux ~]# b=abc
[root@sanchuang-linux ~]# (( $a == $b )) && echo "ok" || echo "error"
ok

結論:建議使用[[ ]]來比較運算,進行判斷

SHELL函數 定義

知識點24 Shell函數 定義

示例:
add() {
    echo "兩數相加為:$(( $num1 + $num2 ))"		#(註:函數裡面的操作內容)
}
------------------------------------------------
調用的時候 add
case $options in 
1)
	add
	;;
2)……………………
--------------------------------------------------------------------------------------------
add(){
    echo "兩數相加為:$(($num1 + $num2))"
}

case $options in
1)
    add			#(註:需要使用的時候調用)
    ;;
2)…………………………

判斷方式 [] [[]] (()) test

知識點25 判斷方式 [] [[]] (()) test

  • (( )) 判斷數字 > < == !=

  • [[ ]] 判斷字元串 或者 -eq -ne -gt -lt 判斷數字

  • 有些語法 [ ] 是不支持的,建議使用[[ ]]

  • test(測試)判斷,等同於1個中括弧

示例:test
---------------------------------------------------------------------
[root@sanchuang-linux ~]# a=123
[root@sanchuang-linux ~]# b=123
[root@sanchuang-linux ~]# test a==b && echo ok
ok
[root@sanchuang-linux ~]# test a==b && echo ok || echo error
ok


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 微服務Docker打包 現在的微服務時代,你的代碼沒個微服務、分散式人家都會覺得低端,當然!對於我們開發人員來說,掌握這些技術意味著漲薪。 ​ 我們項目中用到了多個微服務,我們上一節課程打包用的是手動上傳,但是很麻煩,有沒有更好的方式呢,是有的,我們可以直接通過idea將我們的微服務打包成Docke ...
  • 線程 筆記目錄:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 程式(program) 是為完成特定任務、用某種語言編寫的一組指令的集合。簡單的說:就是我們寫的代碼 進程 進程是指運行中的程式,比如我們使用QQ,就啟動了一個進程,操作系統就會 ...
  • 摘要:都說 Python 簡單快捷,那本篇博客就為大家帶來一些實用的 Python 技巧,而且僅需要 1 行代碼,就可以解決一些小問題。 本文分享自華為雲社區《你猜 1 行Python代碼能幹什麼呢?神奇的單行 Python 代碼》,作者:夢想橡皮擦。 1 行代碼的由來 都說 Python 簡單快捷 ...
  • 文章來源:【公眾號:同程藝龍技術中心】 背景 會員系統是一種基礎系統,跟公司所有業務線的下單主流程密切相關。如果會員系統出故障,會導致用戶無法下單,影響範圍是全公司所有業務線。所以,會員系統必須保證高性能、高可用,提供穩定、高效的基礎服務。 隨著同程和藝龍兩家公司的合併,越來越多的系統需要打通同程 ...
  • 《Python項目開發實戰》PDF高清版免費下載地址 ↑ ↑ ↑ ↑ ↑ ↑ ↑ 點擊即可下載 內容簡介 · · · · · · 通過實際項目增強你的Python技能 通過理論和實踐的結合以及實際可操作的指導,本書將為你呈現真實世界中的Python編程。書中的實際教程聚焦於功能,覆蓋了基本的創建應用 ...
  • using()的本質是C#中的語法糖。 using()語句編譯後生成 try{...} finally{...} 語句,進而確保資源釋放。 using()是程式中使用非托管資源的最佳方式。 ...
  • 此篇文章演示基本的基於docker部署.netcore服務,liunx系統騰訊雲ubuntu,.net core版本3.1。 1.安裝docker apt install docker.io 2.拉取.net core依賴鏡像 docker pull mcr.microsoft.com/dotnet ...
  • 在linux系統中定時器有分為軟定時和硬體定時器,硬體定時器一般指的是CPU的一種底層寄存器,它負責按照固定時間頻率產生中斷信號,形成信號源。基於硬體提供的信號源,系統就可以按照信號中斷來計數,計數在固定頻率下對應固定的時間,根據預設的時間參數即可產生定時中斷信號,這就是軟定時。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...