mycpen

Mycpen

记录学习历程与受益知识
github
telegram
bilibili

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]# if [[ $a > $b ]]; then echo "ok"; else echo "error"; fi
error
[root@mysql-binary shell_test]# [[ $a > $b ]] && echo "ok" || echo "error"
error

示例:字符串比較(( ))  也可以
--------------------------------------------------------------------------------------------
[root@mysql-binary shell_test]# a=abc
[root@mysql-binary shell_test]# b=abc1
[root@mysql-binary shell_test]# (( $a > $b )) && echo "ok" || echo "error"
error
[root@mysql-binary shell_test]# a=abc
[root@mysql-binary shell_test]# b=bac1
[root@mysql-binary shell_test]# (( $a > $b )) && echo "ok" || echo "error"
error
[root@mysql-binary shell_test]# a=abc
[root@mysql-binary shell_test]# b=abc
[root@mysql-binary shell_test]# (( $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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。