shell基礎一
20.1 Shell指令碼介紹
20.2 Shell指令碼結構和執行
20.3 date命令用法
20.1 Shell指令碼介紹
shell是一種指令碼語言
可以使用邏輯判斷、迴圈等語法
可以自定義函式
shell是系統命令的集合
shell指令碼可以實現自動化運維,能打打增加我們的運維效率
20.2 Shell指令碼結構和執行
Shell指令碼開頭需要加上#!/bin/bash 相當於解析器
#!/bin/bash //第一行也可以不要,但是是用於本機,這裡的特殊意義是接下來用的命令是哪個直譯器
echo "123"
w
ls
相當於執行了3次命令
並且相當於是用/bin/bash去解析
也可以用
bash 01.sh
sh -x 01.sh //注意只有sh -x可以看到是多少行進行了什麼指令碼
[[email protected] shell]# /root/shell/01.sh 等命令來執行
也可以用這種方式
[[email protected] shell]# chmod a+x 01.sh
[[email protected] shell]# ./01.sh
shell檔案中也可以加上時間,用#號就行,代表一些描述性文字
20.3 date命令用法
直接使用date,顯示時間,日期
[[email protected] shell]# date
2018年 10月 24日 星期三 22:24:52 CST
[[email protected] shell]# date +%Y //年
2018
[[email protected] shell]# date +%y //年
18
[[email protected] shell]# date +%m //月
10
[[email protected] shell]# date +%M //日
28
[[email protected] shell]# date +%d //分鐘
24
[[email protected] shell]# date +%D //月日年
10/24/18
[[email protected] shell]# date +%Y%m%d
20181024
[[email protected] shell]# date +%F //格式不一樣
2018-10-24
cal檢視日曆
-d一天前
[[email protected] shell]# date -d "-1 day"
Tue Oct 23 22:36:56 CST 2018
[[email protected] shell]# date -d "-1 day" +%F
2018-10-23
[[email protected] shell]# date -d "-1 month" +%F //一個月以前
2018-09-24
時間戳,用於標記
[[email protected] shell]# date +%s
1540391925
[[email protected] shell]# date -d @1540391925
Wed Oct 24 22:38:45 CST 2018
20.4 Shell指令碼中的變數
指令碼中使用某個字串較頻繁並且字串長度很長時就應該使用變數代替
使用條件語句時,常使用變數 if [ $a -gt 1 ]; then … ; fi
引用某個命令的結果時,用變數替代 n=wc -l 1.txt
寫和使用者互動的指令碼時,變數也是必不可少的 read -p “Input a number: ” n; echo n如果沒寫這個n,可以直接使用n如果沒寫這個n,可以直接使用REPLY
內建變數 0,0,1, 2…2…0表示指令碼本身,1第一個引數,1第一個引數,2 第二個 …. $#表示引數個數
數學運算a=1;b=2; c=((((a+b))或者b))或者[a+a+b]
20.5 Shell指令碼中的邏輯判斷
Shell指令碼中邏輯指令碼
-gt (>); 大於 great than
-lt(<); 小於 less than
-ge(>=); 大於或等於
-le(<=); 小於或等於
-eq(==); 等於 equal
-ne(!=) 不等於 not equa
&&並且 ||或者 ---- if [] &&[];then 結合判斷
邏輯判斷有三種寫法
格式一:if 條件 ; then 語句; fi
格式二:if 條件; then 語句; else 語句; fi
格式三:if …; then … ;elif …; then …; else …; fi
格式一
cat 02.sh
#!/bin/bash
a=5
if [ $a -gt 3 ] //判定條件是否大於3
#注意[ ]必須有空格
then
echo "ok"
fi
第二種
else
echo "nook" //否則nook
第三種
#!/bin/bash
a=3 //這裡把a定義到3
if [ $a -gt 4 ]
#注意[]必須有空格
then
echo ">1"
elif [ $a -gt 6 ]
then
[ $a -gt 6 ]
# 這裡可以多重條件
else
echo "nook"
fi
20.6 檔案目錄屬性判斷
Shell中經常和檔案和目錄打交道,對於檔案或者目錄的屬性判斷很重要
[ -f file ]判斷是否是普通檔案,且存在 [ -f /usr/bin/grep ]
[ -d file ] 判斷是否是目錄,且存在 [ -d /tmp/mydir ]
[ -e file ] 判斷檔案或目錄是否存在 [ -e /var/log/syslog ]
[ -r file ] 判斷檔案是否可讀 [ -r /var/log/syslog ]
[ -w file ] 判斷檔案是否可寫 [ -w /var/mytmp.txt ]
[ -x file ] 判斷檔案是否可執行 [ -x /usr/bin/grep ]
舉例
[[email protected] shell]# vim file1.sh //建立一個
#!/bin/bash
f="/tmp/zhaoxiang-linux"
if [ -e $f ]
then
echo $f exist
else
touch $f
fi
執行之後,檢視過程
[[email protected] shell]# sh -x file1.sh
+ f=/tmp/zhaoxiang-linux
+ '[' -e /tmp/zhaoxiang-linux ']'
+ touch /tmp/zhaoxiang-linux
發現這裡進行了三步
更改一下
[[email protected] shell]# cat file2.sh
#!/bin/bash
f="/tmp/zhaoxiang-linux"
if [ -d $f ]
then
echo $f exist
else
touch $f
fi
判定一下是否是目錄,這裡沒有目錄,所以touch一個