一。輸入輸出重定向#
回顧 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 腳本
接收用戶輸入的兩個數,然後選擇要對著兩個數進行什麼計算,並且輸出結果
實現菜單選擇
================
-
add 加法
-
sub 減法
-
mul 乘法
-
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