shell編程基礎(chǔ)

主要內(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,大寶劍
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容