主要內(nèi)容:
1.格式
2.變量
3.判斷
4.循環(huán)
一、格式
1.#!
[root@backup scripts]# vim chek.sh
#!/bin/bash
#!/bin/bash
其中#!叫做幻數(shù),用來指定腳本用的命令解釋器
2.執(zhí)行腳本
用命令sh執(zhí)行腳本
參數(shù) -x 顯示腳本執(zhí)行的過程
[root@m01 scripts]# sh test-v2.sh 2 5
0.4
10
7
-3
[root@m01 scripts]# sh -x test-v2.sh 2 5
+ x=2
+ y=5
+ '[' 2 -lt 2 ']'
+ awk -vn1=2 -vn2=5 'BEGIN{print n1/n2}'
0.4
+ awk -vn1=2 -vn2=5 'BEGIN{print n1*n2}'
10
+ awk -vn1=2 -vn2=5 'BEGIN{print n1+n2}'
7
+ awk -vn1=2 -vn2=5 'BEGIN{print n1-n2}'
-3
二、變量:定義一些變量,方便在腳本里面進(jìn)行重復(fù)使用
1.命名規(guī)則:
1.看到變量名稱,就能識(shí)別變量是什么內(nèi)容
[root@m01 scripts]# date=`date +%F-%w`
[root@m01 scripts]# echo $date
2019-05-30-4
2.不能以數(shù)字開頭
[root@m01 scripts]# date01=`date +%F-%w`
[root@m01 scripts]# echo $date01
2019-05-30-4
[root@m01 scripts]# 01date=`date +%F-%w`
-bash: 01date=2019-05-30-4: command not found
2.引號(hào)系列
1.單引號(hào):所見即所得
2.雙引號(hào):``!
類似單引號(hào),特殊符號(hào)會(huì)被解析運(yùn)行
3.不加引號(hào):與雙引號(hào)類似 支持通配符 * {} ? [] [^]
4.反引號(hào):優(yōu)先執(zhí)行 將結(jié)果拿出來使用
[root@m01 scripts]# oldboy='old man'
[root@m01 scripts]# echo $oldboy
old man
3.變量分類
1.局部變量(普通變量)
取變量內(nèi)容
[root@m01 scripts]# week=7
[root@m01 scripts]# echo $week
7
[root@m01 scripts]# echo $weekday
[root@m01 scripts]# echo ${week}day
7day
2.全局變量(環(huán)境變量)
1.特點(diǎn):
1.系統(tǒng)創(chuàng)建的
2.大部分環(huán)境下意思一樣
3.全局變量一般都是大寫,但是大寫的變量名不一定是大寫
2.常見的環(huán)境變量
1.PATH:命令的位置
2.PS1:命令提示符的格式
3.LANG:字符集
3.創(chuàng)建環(huán)境變量:變量定義前加export
[root@m01 scripts]# env |grep DATE
[root@m01 scripts]# echo $DATE
[root@m01 scripts]# export DATE=`date +%F-%T`
[root@m01 scripts]# echo $DATE
2019-05-30-19:35:34
[root@m01 scripts]# env |grep DATE
DATE=2019-05-30-19:35:34
PS:重新連接后失效
4.取消變量:unset
[root@m01 scripts]# unset DATE
[root@m01 scripts]# echo $DATE
[root@m01 scripts]# env |grep DATE
[root@m01 scripts]#
4.特殊變量
1.$?:上一條命令的返回值,執(zhí)行成功返回值為0,失敗返回值非0
[root@m01 scripts]# pwd
/server/scripts
[root@m01 scripts]# echo $?
0
[root@m01 scripts]# pwa
-bash: pwa: command not found
[root@m01 scripts]# echo $?
127
[root@m01 scripts]#
2.$#:顯示腳本的命令行中參數(shù)的個(gè)數(shù)
[root@m01 scripts]# cat test.sh
#!/bin/bash
echo $#
[root@m01 scripts]# sh test.sh a b c d e f
6
[root@m01 scripts]#
3.$*:顯示腳本所有的參數(shù)
[root@m01 scripts]# cat test.sh
#!/bin/bash
echo $*
[root@m01 scripts]# sh test.sh a b c d e f
a b c d e f
4.$數(shù)字:
$1,$2...$n:顯示腳本的第n個(gè)參數(shù)(n>1)
[root@m01 scripts]# cat test.sh
#!/bin/bash
echo $1 $2 $3
[root@m01 scripts]# sh test.sh a b c d e f
a b c
$0:表示腳本的路徑名字
[root@m01 scripts]# cat test.sh
#!/bin/bash
echo $1 $2 $3 $0
[root@m01 scripts]# sh test.sh a b c d e f
a b c test.sh
三、判斷
1.特殊符號(hào)
1.&&:前一個(gè)命令執(zhí)行成功,再執(zhí)行后一條命令
[root@m01 scripts]# pwd && echo success
/server/scripts
success
2.||:前一條命令執(zhí)行失敗,在執(zhí)行后一條命令
[root@m01 scripts]# pwa || echo failed
-bash: pwa: command not found
failed
2.條件判斷:[ ]
1.文件目錄:
1.-d :判斷目錄是否存在
2.-f:判斷文件是否存在
[root@m01 scripts]# [ -d /etc ] && echo dir exists
dir exists
[root@m01 scripts]# [ -d /ect ] || echo dir not exists
dir not exists
[root@m01 scripts]# [ -f /etc/rsyncd.conf ] && echo File exists
File exists
[root@m01 scripts]# [ -f /etc/ip.txt ] || echo File not exists
File not exists
2.比大小
-eq:=
equal 等于
-ne:!=
not equal 不等于
-gt:>
great than 大于
-ge:>=
great equal 大于等于
-lt:<
less than 小于
-le:<=
less equal 小于等于
3.if 條件判斷
格式:
if [ 判斷條件 ];then
滿足條件,執(zhí)行的操作
else
不滿足條件執(zhí)行的操作
fi
echo "hostname:" `ssh $ip hostname`
if [ $? -ne 0 ]
then
action "host $ip connect failed!" /bin/false
else
action "host $ip connect success" /bin/true
fi
用awk進(jìn)行計(jì)算并結(jié)合if判斷
[root@m01 scripts]# cat test.sh
#!/bin/bash
x=$1
y=$2
awk -vn1=$x -vn2=$y 'BEGIN{print n1/n2}'
awk -vn1=$x -vn2=$y 'BEGIN{print n1*n2}'
awk -vn1=$x -vn2=$y 'BEGIN{print n1+n2}'
awk -vn1=$x -vn2=$y 'BEGIN{print n1-n2}'
[root@m01 scripts]# sh test.sh 26 8
3.25
208
34
18
4.循環(huán)
[root@m01 scripts]# cat DBJ.sh
#!/bin/bash
for n in {1..7}
do
echo "week$n帶思遠(yuǎn)去找girl$n,大寶劍"
done
[root@m01 scripts]# sh DBJ.sh
week1帶思遠(yuǎn)去找girl1,大寶劍
week2帶思遠(yuǎn)去找girl2,大寶劍
week3帶思遠(yuǎn)去找girl3,大寶劍
week4帶思遠(yuǎn)去找girl4,大寶劍
week5帶思遠(yuǎn)去找girl5,大寶劍
week6帶思遠(yuǎn)去找girl6,大寶劍
week7帶思遠(yuǎn)去找girl7,大寶劍