shell腳本編寫之初級版
1. shell腳本的執(zhí)行順序是從上而下的,面向過程。
2. 文件名稱格式: xxx.sh
3. 文件內(nèi)容的第一行: #!/bin/bash
4. shell腳本就是將命令全部融合在一起
5. 定義變量
shell腳本的變量是以:key=value 定義的,注意:=兩邊不能有空格
靜態(tài)變量定義:a='www.ruozedata.com'
動態(tài)變量定義:b=`date` #變量b是獲取當前時間,調(diào)用b的時候動態(tài)獲取當前時間
shell腳本里面使用變量的方法:${變量} ,如使用變量a就應該是${a}。
6. if判斷
可以判斷:整數(shù)、
小數(shù) 、字符串、
文件夾是否存在、文件是否存在 等。
格式: if [空格 xx = yy 空格] 注意:
使用單個等號,表達式前后及等號兩邊各有一個空格。
示例:
if [ '$a' = 'www.ruozedata.com' ]; then
echo "D3"
fi
7. shell中for循環(huán)的幾個常用寫法
第一類:數(shù)字性循環(huán)
例1:
#!/bin/bash
for((i=1;i<=10;i++));
do
echo $(expr $i \* 3 + 1);
done
例2:
#!/bin/bash
for i in $(seq 1 10)
do
echo $(expr $i \* 3 + 1);
done
例3:
#!/bin/bash
for i in {1..10}
do
echo $(expr $i \* 3 + 1);
done
例4:
#!/bin/bash
awk 'BEGIN{for(i=1; i<=10; i++) print i}'
第二類:字符性循環(huán)
例1:
#!/bin/bash
for i in `ls`;
do
echo $i is file name\! ;
done
例2:
#!/bin/bash
for i in $* ;
do
echo $i is input chart\! ;
done
例3:
#!/bin/bash
for i in f1 f2 f3 ;
do
echo $i is appoint ;
done
例4:
#!/bin/bash
list="rootfs usr data data2"
for i in $list;
do
echo $i is appoint ;
done
第三類:路徑查找
例1:
#!/bin/bash
for file in /proc/*;
do
echo $file is file path \! ;
done
例2:
#!/bin/bash
for file in $(ls *.sh)
do
echo $file is file path \! ;
done
8. 分割
shell中字符串分割的三種方法:
例1:分割字符串’1,2,3,4,5’,以“,”分割
#!/bin/bash
var=’1,2,3,4,5’
var=${var//,/ } #這里是將var中的,替換為空格
for element in $var
do
echo $element
done
例2:分割字符串’mark:x:0:0:this is a test user:/var/mark:nologin’,以“:”分割
#!/bin/bash
user=’mark:x:0:0:this is a test user:/var/mark:nologin’
for((i=1;i<=7;i++))
do
echo $user|cut -d ":" -f$i
done
例3:針對例2寫的一種通用的腳本(也使用例1)
#!/bin/bash
user=’mark:x:0:0:this is a test user:/var/mark:nologin’
i=1
while((1==1))
do
split=`echo $user|cut -d ":" -f$i`
if [ "$split" != "" ]
then
((i++))
echo $split
else
break
fi
done
9. 賦權限和執(zhí)行
給shell腳本賦可執(zhí)行權限: chmod +x xxx.sh
執(zhí)行shell腳本的命令:./xxx.sh
sh xxx.sh
10. debug模式
在開發(fā)中,經(jīng)常要是用debug模式來排查問題。
現(xiàn)在有兩種開啟debug模式的方法:
1. 在shell腳本的
#!/bin/bash 后面加上 -x: #!/bin/bash -x
#編輯
20180525.sh文件 添加 -x參數(shù)后保存退出
[hadoop@hadoop002 ~]$ vi 20180525.sh
#!/bin/bash -x
a='www.ruozedata.com'
b=`date`
echo $a
echo ${a}$c/d
#執(zhí)行
20180525.sh 腳本
[hadoop@hadoop002 ~]$ ./20180525.sh
+ a=www.ruozedata.com
++ date
+ b='Fri May 25 14:29:54 CST 2018'
+ echo www.ruozedata.com
www.ruozedata.com
+ echo www.ruozedata.comFri May 25 14:29:54 CST 2018c/d
www.ruozedata.comFri May 25 14:29:54 CST 2018c/d
[hadoop@hadoop002 ~]$
2. 在執(zhí)行腳本的時候 帶上
-x參數(shù): sh -x test.sh
#刪除
20180525.sh腳本里面的 -x參數(shù)后,執(zhí)行執(zhí)行 sh -x 20180525.sh 命令
[hadoop@hadoop002 ~]$ sh -x 20180525.sh
+ a=www.ruozedata.com
++ date
+ b='Fri May 25 14:30:20 CST 2018'
+ echo www.ruozedata.com
www.ruozedata.com
+ echo www.ruozedata.comFri May 25 14:30:20 CST 2018c/d
www.ruozedata.comFri May 25 14:30:20 CST 2018c/d
[hadoop@hadoop002 ~]$