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腳本
接收用戶輸入的兩個數,然後選擇要對著兩個數進行什麼計算,並且輸出結果
實現菜單選擇
================
-
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]# [[ $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