1. 程式人生 > >shell基礎一

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檔案中也可以加上時間,用#號就行,代表一些描述性文字

[[email protected]

shell]# sh -n 01.sh                   //sh -n可以檢視語法錯誤

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一個