• shell是一種腳本語言 aming_linux blog.lishiming.netlinux
• 可使用邏輯判斷、循環等語法nginx
• 能夠自定義函數shell
• shell是系統命令的集合vim
• shell腳本能夠實現自動化運維,能大大增長咱們的運維效率bash
開頭須要加#!/bin/bash運維
[root@linux-5 ~]# mkdir shell [root@linux-5 ~]# cd shell [root@linux-5 shell]# vim lem01.sh #!/bin/bash
寫shell腳本,第一行必須寫#! /bin/bash,固定格式,做用是指定腳本中命令所需的解釋器,腳本如果在當臺機器上去執行,能夠不加這一行也不要緊,由於它知道下面若干條的命令能在這臺機器上去執行,去解析,一般都是 /bin/bash 解釋器來執行的函數
/bin/bash也是一條命令, /bin/bash 和 /bin/sh 是同一個文件spa
[root@linux-5 shell]# ll /bin/bash -rwxr-xr-x. 1 root root 960472 8月 3 2017 /bin/bash [root@linux-5 shell]# ll /bin/sh lrwxrwxrwx. 1 root root 4 3月 4 05:42 /bin/sh -> bash
lem01.sh文件內容就是被/bin/bash所解析的.net
若shell腳本中首行沒有/bin/bash ,可使用 /bin/bash lem01.sh去執行日誌
以#開頭的行做爲解釋說明,除了腳本首行的特殊性之外,如果在shell腳本中的第二行寫入#號開頭的行, 就表示解釋說明的做用
一種是sh lem01.sh運行shell腳本
另外一種方法
先 chmod a+x lem01.sh 給文件加一個執行權限
再 ./lem01.sh 去執行
[root@linux-5 shell]# chmod a+x lem01.sh [root@linux-5 shell]# ./lem01.sh
這裏的 ./ 就至關於一個相對路徑,相對當前一個路徑
也可使用絕對路徑去執行腳本 /root/shell/lem01.sh ,其實就是找到這個文件去執行
執行時加入-x,-x就是顯示腳本執行的過程
[root@linux-5 shell]# sh -x lem01.sh + w 11:36:51 up 33 min, 1 user, load average: 0.01, 0.02, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.88.1 11:06 3.00s 0.04s 0.00s sh -x lem01.sh
每個加號,表示一個操做步驟
執行時加入-n,-n就是檢測腳本執行是否有語法錯誤
[root@linux-5 shell]# sh -n lem01.sh [root@linux-5 shell]#
如果沒有任何的輸出,那麼腳本則沒有錯誤
date命令,能夠顯示當前系統時間日期
[root@linux-5 shell]# date 2018年 07月 12日 星期四 11:58:05 CST
date命令,在shell中用處很是大;對文件後綴增長一個時間,以便後期管理
[root@linux-5 shell]# date +%Y 2018 //四位的年 [root@linux-5 shell]# date +%y 18 //兩位的年 [root@linux-5 shell]# date +%m 07 //月份 [root@linux-5 shell]# date +%h 7月 //月份 [root@linux-5 shell]# date +%w 4 //表示周幾 [root@linux-5 shell]# date +%W 28 //今年的第幾周,今年的第28周 [root@linux-5 shell]# date +%d 12 //日期 [root@linux-5 shell]# date +%D 07/12/18 //直接標記年月日,不過格式比較特殊 [root@linux-5 shell]# date +%Y%m%d 20180711 //年月日 [root@linux-5 shell]# date +%F 2018-07-11 //年月日,這種帶橫槓的
[root@linux-5 shell]# date +%H 12 //小時 [root@linux-5 shell]# date +%M 32 //分鐘 [root@linux-5 shell]# date +%S 53 //秒 [root@linux-5 shell]# date +%T 13:41:37 //總體時間 [root@linux-5 shell]# date +%s 1531322044 //這是一個時間戳,距離1970年1月1日0點0分總共過去多少秒
[root@linux-5 shell]# cal 七月 2018 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
在作nginx日誌切割的時候,到了凌晨切割日誌,到了零點零分切割的日誌是前一天的日誌。因此把日誌加一個時間標記的話,應標記爲昨天的日期
減號- 表示以前的日期,加號 + 表示從今日後的日期
date -d "-1 day" +%F ##顯示前一天的日期 date -d "-1 month" +%F ##顯示上個月的日期 date -d "-1 years" +%F ##顯示上一年的日期 date -d "+1 hour" +%T ##顯示下一小時
[root@linux-5 shell]# date +%s -d "2018-07-12 13:48:11" 1531374491 [root@linux-5 shell]# date -d @1531374491 2018年 07月 12日 星期四 13:48:11 CST
•當腳本中使用某個字符串較頻繁而且字符串長度很長時就應該使用變量代替
• 使用條件語句時,常使用變量 if [ $a -gt 1 ]; then ... ; fi
• 引用某個命令的結果時,用變量替代 n=`wc -l 1.txt`
• 寫和用戶交互的腳本時,變量也是必不可少的 read -p "Input a number: " n; echo $n 若是沒寫這個n,能夠直接使用$REPLY
• 內置變量 $0, $1, $2… $0表示腳本自己,$1 第一個參數,$2 第二個 .... $#表示參數個數
• 數學運算a=1;b=2; c=$(($a+$b))或者$[$a+$b]