腳本初學者

期待已久的腳本終于在這一周學到了,對于腳本,我感覺就是有兩點,第一:考驗一個人的思維能力,如果能把你想要的結果用腳本正確的表示出來。第二:以前學的基礎命令,怎么組合起來使用。達到以上兩點,再難寫的腳本都可以寫出來的。

一、編寫,執行一個腳本

       腳本的格式

        首行:#!/bin/bash  (目前學到的就以這個開頭,相當于進入了下一級bash)

        不是首行:帶#的都是注釋

                        不帶#的都是命令
        規范的腳本

        1、第一行一般為調用使用的語言

        2、程序名,避免更改文件名為無法找到正確的文件

        3、版本號

        4、更改后的時間

        5、作者相關信息

        6、該程序的作用,及注意事項

        7、最后是各版本的更新簡要說明

        腳本的執行

               需要給執行權限,在命令行上指定腳本的絕對或相對路徑

               直接運行解釋器,將腳本作為解釋器程序的參數運行

二、腳本調試

        檢測腳本中的語法錯誤

        bash -n 腳本路徑

        調試執行

        bash -x 腳本路徑

        腳本初學者

三、變量

      本地變量:僅對當前SHELL有效,對子SHELL也無效

               直接輸入A=123  設置本地變量 

               set查看本地和環境變量
      腳本初學者

環境變量:對當前SHELL及其子SHELL均有效。  

export A=121   設置環境變量

declare -x varname=value 也是設置環境變量

env查看環境變量

export

      腳本初學者

      位置變量:$1, $2, …來表示,用于讓腳本在腳本代碼 中調用通過命令行傳遞給它的參數

                      $0:命令本身

                      $*:傳遞給腳本的所有參數,全部參數合為一個字符串

                      $@:傳遞給腳本的所有參數,每個參數為獨立的字符串

                      $#:傳遞給腳本的參數的個數

                      注釋:$@ $* 只在被雙引號包起來的時候才會有差異

                      set – – 清空所有位置變量

       腳本初學者

       腳本初學者

      只讀變量:readonly name        不能修改變量

                      readonly -p  查看只讀變量

      刪除變量:unset name

四、 ps -ef 查看進程號   ps -ef |grep bash  查看bash的進程號

$:顯示當前的PID

PPID:顯示父進程的PID

SHLVL: 顯示當前SHELL是幾級bash

pstree 顯示進程樹

       -p  同時顯示進程的PID

       腳本初學者

五、轉譯

       \完全轉譯

       “” 部分轉譯    不轉譯 \   `   !   $ 

       ‘’ 完全轉譯

       腳本初學者

六、bash中的算數運算

+, -, *, /, %取模(取余), **(乘方)在bc當中乘方是^

        實現算術運算:

(1)let var=算術表達式 

let var++  自加1    let var- – 自減1  let var+3 自加3

(2) var=$[算術表達式]

(3) var=$((算術表達式))

(4) var=$(expr arg1 arg2 arg3 …)   乘法時要轉譯* ,即\*

(5) declare –i var = 數值

(6) echo ‘算術表達式’ | bc

七、與,或,非 (true=1 false=2)

       與:1與1=1

             1與0=0

             0與1=0

             0與0=0

       只要有一個假則為假

       短路與 前一個為假,則不再判斷第二個值

       或:1或1=1

             1或0=1

             0或1=1

             0或0=0

只要有一個真則為真

短路或,前一個為真,則不再判斷第二個值

        非:!1=0     

              !0=1

八、測試

測試命令

test expression

[ expression ]

[[ expression ]]

長格式的例子:

test “$A” == “$B” && echo “Strings are equal”

test “$A” -eq “$B” && echo “Integers are equal” ?

簡寫格式的例子:

[ “$A” == “$B” ] && echo “Strings are equal”

[ “$A” -eq “$B” ] && echo “Integers are equal

EXPRESSION1 -a EXPRESSION2 并且

EXPRESSION1 -o EXPRESSION2 或者

! EXPRESSION

必須使用測試命令進行

數值測試:

 -gt 是否大于

        -ge 是否大于等于

        -eq 是否等于

        -ne 是否不等于

        -lt 是否小于

        -le 是否小于等于

字符串測試:

= = 是否等于

> ascii碼是否大于ascii碼

       < 是否小于

      != 是否不等于

       =~ 左側字符串是否能夠被右側的pattern所匹配

       以上的表達式一般用在[[ ]]中

       -z 檢驗字符串是否為空,空為真,非空為假

       -o 與-z相反

       用于字符串比較時的用到的操作數都應該使用引號

文本權限測試:

-r FILE:是否存在且可讀

-w FILE: 是否存在且可寫

-x FILE: 是否存在且可執行

-u FILE:是否存在且擁有suid權限

-g FILE:是否存在且擁有sgid權限

-k FILE:是否存在且擁有sticky權限

雙目測試:

FILE1 -ef FILE2: FILE1與FILE2是否指向同一個設 備上的相同inode

FILE1 -nt FILE2: FILE1是否新于FILE2(mtime)

FILE1 -ot FILE2: FILE1是否舊于FILE

組合條件測試:

第一種方式:

COMMAND1 && COMMAND2 并且

COMMAND1 || COMMAND2 或者

! COMMAND   非

如:[[ -r FILE ]] && [[ -w FILE ]] ?

第二種方式:

EXPRESSION1 -a EXPRESSION2 并且

EXPRESSION1 -o EXPRESSION2 或者

! EXPRESSION

必須使用測試命令進行

    

針對以上的內容做出了以下練習

1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。

        腳本初學者

        針對此題就是考察一些命令的使用:查看主機名:hostname 查看系統版本:cat /etc/redhat-release 查看內核版本:uname -r 查看CPU型號:cat /proc/cpuinfo 查看內存大?。篶at /proc/meminfo查看硬盤大?。篺disk -l

2、編寫腳本/root/bin/sumid.sh,計算/etc/passwd文件中的第10個用戶和第20用戶的ID之和

        腳本初學者   這個只是針對第十個用戶和第二十個用戶。
        腳本初學者   這個針對多個用戶來說,只需要把grep后面的截取內容改了即可

3、編寫腳本/root/bin/hostping.sh,接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問”

        腳本初學者

        ping -c 是ping的結果顯示幾行,-W是幾秒ping一次  &> 是把錯誤或者正確的結果都導入黑洞里面不顯示結果

4、編寫腳本/root/bin/checkdisk.sh,檢查磁盤分區空間和inode使用率,如果超過80%,就發廣播警告空間將滿

        腳本初學者

        此題就是先把磁盤分區空間和inode的最大使用率給找出來,然后判斷是否超過80%,然后用wall報警提醒用戶。

5、編寫腳本/root/bin/excute.sh ,判斷參數文件是否為sh后綴的普通文件,如果是,添加所有人可執行權限,否則提示用戶非腳本文件

        腳本初學者

        此題就是先判斷是否是普通文件,然后以取基名的方法把目錄名字取出來,然后判斷是否以sh后綴的既可以。

    腳本的功能就是(1)自動化常用命令(2)執行系統管理和故障排除(3)創建簡單的應用程序(4)處理文本和文件

    腳本對于我們以后的工作非常方便,我們以后的工作大多數也都是寫腳本的。所以對于這一塊我們應該更加努力。

原創文章,作者:In summer,如若轉載,請注明出處:http://www.www58058.com/83791

(0)
In summerIn summer
上一篇 2017-08-05 15:01
下一篇 2017-08-05 15:32

相關推薦

  • 刪除三天前備份的腳本

    [root@scm-dzm testfolder]# ll total 4 drwxr-xr-x. 2 root root   6 Jul 14 00:53 20160722 drwxr-xr-x. 2 root roo…

    Linux干貨 2016-07-16
  • sed 文本處理工具介紹

    sed簡介: 文本處理三劍客之一的sed sed是一種行編輯器,它一次處理一行內容,本身是一個管道命令,對行的數據進行 替換 增加 刪除 選取的工作 sed的命令為:sed[opition] ‘script’ inputfile…             &nbs…

    2017-06-24
  • N25_第五周

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;grep -E "^[[:space:]]+" /boot/grub2/grub.cfg 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行;grep -E "^#[[:space:]…

    Linux干貨 2017-01-08
  • corosync v2 + pacemaker + crmsh 實現mariadb高可用

    高可用mariadb拓撲圖 一、設計前提     1、時間同步 # ntpdate 172.16.0.1 或者 # chronyc sources     2、所有的主機對應的IP地址解析可以正常工作, 主機名要與命令#uname -n 所得的結果一致   &…

    Linux干貨 2016-08-28
  • find 詳解

    find 命令基本用法:         find pathname [opotions] [-print | -exec | -ok …] 1、find 基本參數:         pa…

    Linux干貨 2016-12-26
  • N25-第三周作業

    一、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可.          [root@test ~]# who | cut -d' ' -f1 | sort -u 二、取出最后登錄到當前系統的用戶的相關信息。    &nbs…

    Linux干貨 2016-12-26
欧美性久久久久