腳本初學者

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

一、編寫,執行一個腳本

       腳本的格式

        首行:#!/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 查看內存大小:cat /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
下一篇 2017-08-05

相關推薦

  • Linux中用戶管理基本命令和用法

    Linux操作系統用戶管理: 特點:多任務,多用戶操作系統(Multi-tasks,Multi-Users) Linux中用戶: 用戶組成: 用戶ID:每個用戶都有一個唯一識別碼稱為用戶ID。        密碼:認證手段 用戶分類:管理用戶 管理員的用戶ID為0       普通用戶 U…

    Linux干貨 2016-08-05
  • find命令詳解

    find命令是用來在給定的目錄下查找符合給定條件的文件   find [OPTIONS] [查找起始路徑] [查找條件] [處理動作]   一、OPTIONS參數     -P、-L、-H:控制軟連接的對待方式,用的不多。不介紹了   二、查找路徑     就是個目錄路徑,相對和絕對都可以。   三、查找條件    ?。ㄒ唬?、根據名稱查找       -na…

    Linux干貨 2016-09-19
  • linux網絡配置

    一、 網絡基本配置:  真不敢想象沒有網絡的一天應該怎樣度過,但是有了網絡就行了?原來剛有了網絡時由于沒有統一的標準,各大硬件廠商各自為政,都在搞網絡,但是都只是同一廠商的設備可以進行通訊,就和不同的國家的人交流使用了不同的語言一樣,難以將所有的網絡連接起來,之后Internet有了統一的標準,大家都遵循它的標準,后來計算機才能進行網絡通訊,同樣將…

    Linux干貨 2016-09-13
  • Linux程序包管理yum

    yum客戶端: 配置文件: /etc/yum.conf:為所有倉庫提供公共配置 /etc/yum.repos.d/*.repo:為倉庫的指向提供配置 倉庫指向的定義: [repositoryID] name=Some name for this repository baseurl=url://path/to/repository/ enabled={1|0…

    Linux干貨 2015-11-23
  • MariaDB日志

    MariaDB日志 查詢日志:query log; 慢查詢日志:slow query log 查詢時長超出指定界限。 錯誤日志:error log 二進制日志:binary log;此中存儲要發生改變或潛在發生改變的語句。 中繼日志:reley log 事務日志:transaction log 1、查詢日志 記錄查詢語句,日志存儲位置:一般不開啟。 文件:f…

    Linux干貨 2016-11-20
  • N22-第十四周作業

    系統的INPUT和OUTPUT默認策略為DROP; ~]# iptables -P INPUT DROP ~]# iptables -P OUTPUT DROP 1、限制本地主機的web服務器在周一不允許訪問;新請求的速率不能超過100個每秒;web服務器包含了admin字符串的…

    Linux干貨 2017-03-15
欧美性久久久久