Shell腳本編程

Shell腳本編程

關于腳本的調試

    bash -n /path/to/some_script

                           檢測腳本中的語法錯誤

v  bash -x /path/to/some_script

                           調試執行

 

變量

變量:命名的內存空間

數據存儲方式:

字符:

數值:整型,浮點型 v

變量:變量類型

   作用:

        1、數據存儲格式

        2、參與的運算

        3、表示的數據范圍

類型: 字符 數值:整型、浮點型

 

bash中變量的種類

根據變量的生效范圍等標準:

    本地變量:生效范圍為當前shell進程;對當前shell之外 的其它shell進程,包括當前shell的子shell進程均無效

本地變量

v 變量賦值:name=‘value’, v

   可以使用引用value:

       (1) 可以是直接字串; name=“root"

       (2) 變量引用:name="$USER"

       (3) 命令引用:name=`COMMAND`, name=$(COMMAND) v

變量引用:${name}, $name

    "":弱引用,其中的變量引用會被替換為變量值

    '':強引用,其中的變量引用不會被替換為變量值,而保

持原字符串 v

    顯示已定義的所有變量:set v

    刪除變量:unset name

環境變量:生效范圍為當前shell進程及其子進程

環境變量

v 變量聲明、賦值:

       export name=VALUE

       declare -x name=VALUE v

   變量引用:$name, ${name} v

   顯示所有環境變量:

       export

       env

       printenv v

   刪除:unset name v

   bash有許多內建的環境變量:PATH, SHELL, USRE,UID, HISTSIZE, HOME, PWD, OLDPWD, HISTFILE, PS1

局部變量:生效范圍為當前shell進程中某代碼片斷(通常 指函數)

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

    $1, $2, …:對應第1、第2等參數,shift [n]換位置

    $0: 命令本身

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

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

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

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

特殊變量:$?, $0, $*, $@, $#

只讀變量:

    只能聲時,但不能修改和刪除

        readonly name

        declare -r name

 

示例:判斷給出的文件的行數

    linecount="$(wc -l $1| cut -d' ' -f1)"

    echo "$1 has $linecount lines."

 

練習

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

Shell腳本編程 

2、編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中

Shell腳本編程 

3、編寫腳本/root/bin/disk.sh,顯示當前硬盤分區中空間利用率最大的值

Shell腳本編程 

4、編寫腳本/root/bin/links.sh,顯示正連接本主機的每個遠程主機的IPv4地址和連接數,并按連接數從大到小排序

Shell腳本編程 

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

Shell腳本編程 

6、寫一個腳本/root/bin/sumspace.sh,傳遞兩個文件路徑作為參數給腳本,計算這兩個文件中所有空白行之和

Shell腳本編程 

7、寫一個腳本/root/bin/sumfile.sh,統計/etc, /var, /usr目錄中共有多少個一級子目錄和文件

Shell腳本編程 

8、寫一個腳本/root/bin/argsnum.sh,接受一個文件路徑作為參數;如果參數個數小于1,則提示用戶“至少應該給一個參數”,并立即退出;如果參數個數不小于1,則顯示第一個參數所指向的文件中的空白行數

Shell腳本編程 

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

Shell腳本編程 

 

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

(0)
xiaoqiang512xiaoqiang512
上一篇 2016-08-15
下一篇 2016-08-15

相關推薦

  • cp和ln命令簡述

    cp和軟ln命令簡述 cp          備注: 1.       該命令可以自動判斷你所復制的是文件還是目錄 2.       當源是一個文件,目標(目的…

    2017-08-19
  • 8.1_Linux管道的使用和用戶管理

    什么是管道? 管道就是把命令1的標準輸出發送給命令2的標準輸入,把命令2發的標準輸出發送給命令3的標準輸入。。。 最后一個命令會在當前shell進程的子shell進程中執行用來 管道實現了使用目的單一的小程序,組合小程序完成復雜的任務 管道需要配合其他命令的使用 tr命令的使用,常常用于配合管道     -c或–co…

    Linux干貨 2016-08-10
  • N25-Bazinga-第三周作業

    N25-Bazinga-第三周作業 1.列出當前系統上登錄的所有用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# w | cut -d' ' -f1 | uniq -c |&nbs…

    Linux干貨 2016-12-21
  • MySQL應用管理

    這篇文章主要講述基本的SQL語句,以供新手參考使用,不過最好的辦法還是查閱官方文檔和help命令。 進入正題 什么是SQL?        SQL結構化查詢語言,是關系型數據庫查詢和管理語言,是一種數據庫查詢和程序設計語言,用于存取數據以及查詢,更新和管理關系型數據庫系統。 SQL的分類 &nbsp…

    Linux干貨 2015-09-23
  • N28-第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。
    2、取出最后登錄到當前系統的用戶的相關信息。
    3、取出當前系統上被用戶當作其默認shell的最多的那個shell。
    4、將/etc/passwd中的第三個字段數值最大的后10個用戶的信息全部改為大寫后保存至/tmp/maxusers.txt文件中。
    5、取出當前主機的IP地址,提示:對ifconfig命令的結果進行切分。
    6、列出/etc目錄下所有以.conf結尾的文件的文件名,并將其名字轉換為大寫后保存至/tmp/etc.conf文件中。
    7、顯示/var目錄下一級子目錄或文件的總個數。
    8、取出/etc/group文件中第三個字段數值最小的10個組的名字。
    9、將/etc/fstab和/etc/issue文件的內容合并為同一個內容后保存至/tmp/etc.test文件中。
    10、請總結描述用戶和組管理類命令的使用方法并完成以下練習:
    (1)、創建組distro,其GID為2016;
    (2)、創建用戶mandriva, 其ID號為1005;基本組為distro;
    (3)、創建用戶mageia,其ID號為1100,家目錄為/home/linux;
    (4)、給用戶mageia添加密碼,密碼為mageedu;
    (5)、刪除mandriva,但保留其家目錄;
    (6)、創建用戶slackware,其ID號為2002,基本組為distro,附加組peguin;
    (7)、修改slackware的默認shell為/bin/tcsh;
    (8)、為用戶slackware新增附加組admins;

    2017-12-17
  • N22-℡浮生.若夢 ╮第九周作業

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash ## declare -i log_user declare -i notlog_user for i …

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