Shell腳本總結

1、首行固定格式
#!/bin/bash
#註釋,第一行格式固定
2、賦予文件執行的權限
chmod +x file1name
3、管道操作符 (|) ,將一個命令的輸出作爲另外一個命令的輸入
grep "hello" file.txt | wc -l
4、重定向:將命令的結果輸出到文件,而不是標準輸出(屏幕)

寫入文件並覆蓋舊文件
> 加到文件的尾部,保留舊文件內容
5、反短斜線(`)——鍵盤Esc鍵下面的按鍵對應的英文符號,使用反短斜線可以將一個命令的輸出 作爲另外一個命令的一個命令行參數。
6、用來查找過去24小時(-mtime –2則表示過去48小時)內修改過的文件。
find . -mtime -1 -type f -print
7、如果您想將所有查找到的文件打一個包,則可以使用以下腳本:
#!/bin/sh

The ticks are backticks (`) not normal quotes ('):

tar -zcvf lastmod.tar.gz find . -mtime -1 -type f -print
8、通常用" [ ] "來表示條件測試。注意這裏的空格很重要。要確保方括號的空格。
[ -f "somefile" ]
判斷是否是一個文件
[ -x "/bin/ls" ]
判斷/bin/ls是否存在並有可執行權限
[ -n "$var" ]
判斷$var變量是否有值
[ "$a" = "$b" ]
判斷$a和$b是否相等
[ -r "$mailfolder" ]
判斷$mailfolder是否可讀
[ -d $TARGET_DIR ]
判斷$TARGET_DIR是否是一個文件夾
● 特殊的變量$1,該變量包含了傳遞給該程序的第一個參數值。
● $? :是上一條命令的返回碼。
[ $? -eq 0 ]
9、測試上一條命令的是否執行成功.
● 特殊的變量$,該變量包含了所有輸入的命令行參數值。
● 特殊的變量$#,表示命令參數個數。
● 轉義字符——反斜杆(\)。在向程序傳遞任何參數之前,程序會擴展通配符和變量。這裏所謂擴展的意思是程序會把通配符(比如
)替換成合適的文件名,把變量替換成變量值。爲了防 止程序作這種替換,您可以使用引號。單引號更嚴格一些,它可以防止任何變量擴展;雙引號可以防止通配符擴展但允許變量擴展;還有一種防止這種擴展的方法,那就是使用轉義字符——反斜杆(\)。
10、基本的if條件命令選項有:
-eq —比較兩個參數是否相等(例如,if [ 2 –eq 5 ])
-ne —比較兩個參數是否不相等
-lt —參數1是否小於參數2
-le —參數1是否小於等於參數2
-gt —參數1是否大於參數2
-ge —參數1是否大於等於參數2
11、時間格式轉換
source /etc/profile
獲取昨天日期 yyyyMMdd 格式
yesterday=date --date='1 days ago' +%Y%m%d
獲取昨天日期 yyyy-MM-dd 格式
yesterday2=date --date='1 days ago' +%Y-%m-%d
獲取今天日期 yyyyMMdd 格式
today=date --date='0 days ago' +%Y%m%d
獲取今天日期 yyyy-MM-dd 格式
today2=date --date='0 days ago' +%Y-%m-%d
獲取明天日期 yyyyMMdd 格式
today=date --date='1 days' +%Y%m%d
獲取明天日期 yyyy-MM-dd 格式
today2=date --date='1 days' +%Y-%m-%d
獲取當前時間 yyyy-MM-dd HH:mm:ss 格式
nowtime=date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
獲取當前日間 HH:mm:ss 格式
nowtime2=date --date='0 days ago' +%H:%M:%S
獲取1小時前時間 yyyy-MM-dd HH:mm:ss 格式
onehourage=date --date='1 hours ago' "+%Y-%m-%d %H:%M:%S"
獲取1小時後時間 yyyy-MM-dd HH:mm:ss 格式
onehourage2=date --date='1 hours' "+%Y-%m-%d %H:%M:%S"
獲取2小時前時間 yyyy-MM-dd HH:mm:ss 格式
twohourage=date --date='2 hours ago' "+%Y-%m-%d %H:%M:%S"
獲取2小時後時間 yyyy-MM-dd HH:mm:ss 格式
twohourage2=date --date='2 hours' "+%Y-%m-%d %H:%M:%S"
獲取1個月前時間 yyyy-MM-dd HH:mm:ss 格式
date –date=’1 month ago’ “+%Y-%m-%d %H:%M:%S”
獲取1個月加1天前時間 yyyy-MM-dd HH:mm:ss 格式
date –date=’1 month ago + 1 day ago’ “+%Y-%m-%d %H:%M:%S”
獲取1個月減1天前時間 yyyy-MM-dd HH:mm:ss 格式
date –date=’1 month ago - 1 day ago’ “+%Y-%m-%d %H:%M:%S”
獲取1個月加1天加1小時加1分鐘加1秒鐘前時間 yyyy-MM-dd HH:mm:ss 格式
date –date=’1 month ago + 1 day ago + 1 hour ago + 1 min ago + 1 sec ago’ “+%Y-%m-%d %H:%M:%S”
獲取1個月加1天減1小時減1分鐘減1秒鐘前時間 yyyy-MM-dd HH:mm:ss 格式 可以 + - 濫用
date –date=’1 month ago + 1 day ago - 1 hour ago - 1 min ago - 1 sec ago’ “+%Y-%m-%d %H:%M:%S”
獲取1個月加1天加1小時加1分鐘加1秒鐘後時間 yyyy-MM-dd HH:mm:ss 格式
date –date=’1 month + 1 day + 1 hour + 1 min + 1 sec ’ “+%Y-%m-%d %H:%M:%S”
獲取1個月加1天減1小時減1分鐘減1秒鐘後時間 yyyy-MM-dd HH:mm:ss 格式
date –date=’1 month + 1 day - 1 hour - 1 min - 1 sec ’ “+%Y-%m-%d %H:%M:%S”
獲取1年後1個月加1天減1小時減1分鐘減1秒鐘後時間 yyyy-MM-dd HH:mm:ss 格式
date –date=’1 year 1 month + 1 day - 1 hour - 1 min - 1 sec ’ “+%Y-%m-%d %H:%M:%S”
獲取1年前1個月加1天減1小時減1分鐘減1秒鐘後時間 yyyy-MM-dd HH:mm:ss 格式
date –date=’1 year 1 month + 1 day - 1 hour - 1 min - 1 sec ’ “+%Y-%m-%d %H:%M:%S”

例子:
(1) #!/bin/sh
date2=$(date --date="1 years ago" "+%Y-%m-%d %H:%M:%S")
echo $date2
result=2
if [ $result -ge 1 ]
then
echo "the result is succ"
else
echo "the result is fail"
fi
year2=$(date --date=" 3 years " "+%Y")
echo $year2

(2)#!/bin/bash
source /data/gzfx/.bash_profile
if [ $# -ne 1 ]
then
echo pleace supplied tow parameters
dd=$(date -d "-1 day" "+%Y%m%d")
else
dd=$1
fi
#dd=20171031
echo $dd
echo "** Starting date "+%Y-%m-%d %H:%M:%S" * "
java -jar /data/gzfx/wu/hbase/hbase_ms-0.0.1-SNAPSHOT-jar-with-dependencies.jar 1 ${dd}
echo "**end date "+%Y-%m-%d %H:%M:%S" *
"

12、數組的使用
(1)# 一對括號表示是數組,數組元素用“空格”符號分割開。
a=(1 2 3 4 5)
(2)# 用${#數組名[@或]} 可以得到數組長度
echo ${#a[@]}
echo ${#a[
]}
(3)# 用${數組名[@或]} 可以得到整個數組內容
echo ${a[@]}
echo ${a[
]}
(4)# 直接通過 數組名[下標] 就可以對其進行引用賦值
a[1]=100
(5)# 如果下標不存在,自動添加新一個數組元素
a[1000]=1000
(6)# unset 數組[下標] 可以清除相應的元素
unset a[1]
(7)# 截取數組 ${數組名[@或]:起始位置:長度},從下標0開始,截取長度爲3,切片原先數組,返回是字符串,中間用“空格”分開
echo ${a[@]:0:3}
(8)# 如果加上”()”,將得到切片數組,上面例子:c 就是一個新數據。br/>c=(${a[@]:1:4})
echo ${c[
]}
echo ${#c[]}
(9)# ${數組名[@或
]/查找字符/替換字符} 該操作不會改變原先數組內容,如果需要 修改,可以看上面例子,重新定義數據。
echo ${a[@]/3/100}
echo ${a[@]}

如果需要需求,重新賦值給變量a

a=(${a[@]/3/100})
echo ${a[@]}
(10)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章