馬哥教育網絡班22期+第9周課程練習 忍者亂太郎喻成

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

#!/bin/bash

declare -i user_can_not_login_count;
declare -i user_can_login_count;

for line in $(cat /etc/passwd); do
    IFS=':' read -r -a cols <<< $line
    if [ ${cols[-1]} == '/sbin/nologin' ]; then                
        let user_can_not_login_count+=1;        
    else                
        let user_can_login_count+=1;        
    fi
done

echo $user_can_not_login_count, "can not login to system remotely"
echo $user_can_login_count, "can login to system remotely"

2、寫一個腳本
    (1) 獲取當前主機的主機名,保存于hostname變量中;
    (2) 判斷此變量的值是否為localhost,如果是,則將當前主機名修改為www.magedu.com;
    (3) 否則,則顯示當前主機名;

#!/bin/bash
if [[ $(hostname) =~ localhost* ]]; then        
    hostname 'www.mageedu.com'
fi
echo $(hostname)

3、寫一個腳本,完成如下功能
    (1) 傳遞一個磁盤設備文件路徑給腳本,判斷此設備是否存在;
    (2) 如果存在,則顯示此設備上的所有分區信息;

#!/bin/bash
if [[ -b $1 ]]; then        
    fdisk -l $1
else        
    echo "$1 is not a disk"
fi

4、寫一個腳本,完成如下功能
   腳本能夠接受一個參數;
   (1) 如果參數1為quit,則顯示退出腳本,并執行正常退出;
   (2) 如果參數1為yes,則顯示繼續執行腳本;
   (3) 否則,參數1為其它任意值,均執行非正常退出;

#!/bin/bash

if [[ $1 == 'quit'  ]]; then        
    echo ‘quit normally’;        
    exit 0;
elif [[ $1 == 'ok' ]]; then        
    echo "continue";
    exit 0;
else        
    echo 'unknow error';        
    exit 1;
fi

5、寫一個腳本,完成如下功能
   傳遞一個參數給腳本,此參數為gzip、bzip2或者xz三者之一;
   (1) 如果參數1的值為gzip,則使用tar和gzip歸檔壓縮/etc目錄至/backups目錄中,并命名為/backups/etc-20160613.tar.gz;
   (2) 如果參數1的值為bzip2,則使用tar和bzip2歸檔壓縮/etc目錄至/backups目錄中,并命名為/backups/etc-20160613.tar.bz2;
   (3) 如果參數1的值為xz,則使用tar和xz歸檔壓縮/etc目錄至/backups目錄中,并命名為/backups/etc-20160613.tar.xz;
   (4) 其它任意值,則顯示錯誤壓縮工具,并執行非正常退出;

#!/bin/bash

if [[ $1 == 'gzip'  ]]; then        
    tar -zcvf  /backups/etc-$(date +%Y%M%d).tar.gz /etc        
    exit 0;
elif [[ $1 == 'bzip2' ]]; then        
    tar -jcvf  /backups/etc-$(date +%Y%M%d).tar.bz2 /etc        
    exit 0;
elif [[ $1 == 'xz' ]]; then        
    tar -Jcvf  /backups/etc-$(date +%Y%M%d).tar.xz /etc        
    exit 0;
else        
    echo 'unknow argument';        
    exit 1;
fi

6、寫一個腳本,接受一個路徑參數:
   (1) 如果為普通文件,則說明其可被正常訪問;
   (2) 如果是目錄文件,則說明可對其使用cd命令;
   (3) 如果為符號鏈接文件,則說明是個訪問路徑;
   (4) 其它為無法判斷;

#!/bin/bash


if [[ -h $1 ]]; then        
    echo "$1 is an symbolic link";        
    exit 0;
elif [[ -f $1 ]]; then        
    echo "$1 is a file can be access normally";        
    exit 0;
elif [[ -d $1 ]]; then        
    echo "$1 is an directory can be access by using cd command";        
    exit 0;
else        
    echo 'unknow argument';        
    exit 1;
fi

7、寫一個腳本,取得當前主機的主機名,判斷
   (1) 如果主機名為空或為localhost,或為""(none)"",則將其命名為mail.magedu.com;
   (2) 否則,顯示現有的主機名即可;

#!/bin/bash

if  [[ $(hostname) =~ localhost* ]] || [[ -z $(hostname) ]] || [[ $(hostname) == "(none)" ]]; then        
    hostname www.magedu.com
fi
echo $(hostname)

8、寫一腳本,接受一個用戶名為參數;
   (1) 如果用戶的id號為0, 則顯示其為管理員;
   (2) 如果用戶的id號大于0且小于500, 則顯示其為系統用戶;
   (3) 否則,則顯示其為普通用戶;

#!/bin/bash

if [[ -z $1 ]]; then        
    echo "must to have one user input";        
    exit 1;
fi

if [[ $(id -u $1) ]]; then        
    let user_id=$(id -u $1);        
    if [[ $user_id -eq 0 ]]; then                
        echo "$1 is root";                
        exit 0;        
    elif [[ $user_id -lt 500 ]]; then                
        echo "$1 is an system user";                
        exit 0;        
    else                
        echo "$1 is an normal user";                
        exit 0;        
    fi
else:        
    echo "user $1 is not exists"
fi

10、寫一個腳本,傳遞一個用戶名參數給腳本;
   (1) 如果用戶的id號大于等于500,且其默認shell為以sh結尾的字符串,則顯示“a user can log system.”類的字符串;
   (2) 否則,則顯示無法登錄系統;

#!/bin/bash

user_name=$1;
function get_default_shell {        
    echo "$(cat /etc/passwd | awk -F: -v user_name=$1 '{ if ($1 == user_name)print $7 }')";
}

user_shell=$(get_default_shell $user_name)

let user_id=$(id -u $1);

if [[ $user_id -gt 500 ]] && [[ $user_shell =~ .*sh ]]; then        
    echo "a user can log system";        
    exit 0;
else        
    echo "a user can not log system";        
    exit 1;
fi

11、寫一個腳本,完成如下任務 :
   (1) 按順序分別復制/var/log目錄下的每個直接文件或子目錄至/tmp/test1-testn目錄中;
   (2) 復制目錄時,才使用cp -r命令;
   (3) 復制文件時使用cp命令;
   (4) 復制鏈接文件時使用cp -d命令;
   (5) 余下的所有類型,使用cp -a命令;

#!/bin/bash

if [[ ! -e /tmp/test1-testn ]]; then        
    rm -rf /tmp/test1-testn;
fi

mkdir -p /tmp/test1-testn
for f in $(ls /var/log); do        
    file_path="/var/log/$f"        
    if [[ -d $file_path ]]; then                
        cp -R $file_path /tmp/test1-testn;        
    elif [[ -f $file_path ]]; then                
        cp $file_path /tmp/test1-testn;        
    elif [[ -h $file_path ]]; then                
        cp -d $file_path /tmp/test1-testn;        
    else                
        cp -a $file_path /tmp/test1-testn;        
    fi
done

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

(0)
chengyuchengyu
上一篇 2017-01-03
下一篇 2017-01-03

相關推薦

  • iptables實現地址轉換

    NAT:(工作在網絡和傳輸層) 過載技術 Basic NAT:靜態NAT     一個內部主機,分配一個外網地址 NAPT:動態NAT,網絡地址端口轉換;net會話表     源地址轉換:SNAT 用于內網主機訪問互聯網    &…

    Linux干貨 2016-10-31
  • Linux文件類型及顏色標識整理

    Linux文件類型及顏色標識整理 Linux文件系統中有如下的文件類型: 類型1:普通文件—-à白色 類型2:目錄文件—à藍色 類型3:鏈接文件—à淺藍色 類型4:字符設備文件—à黃色 類型5:塊設備文件—-à黃色 類型6:管道文件—à青黃色 類型7:套接字文件—à粉紅色 為…

    Linux干貨 2016-10-19
  • 馬哥教育網絡班22期+第一周課程練習

    計算機的組成及其功能 計算機主要由五大部分組成:控制器、運算器、存儲器、輸入設備、輸出設備,即CPU(控制器、運算器)、內存、I/O(輸入/輸出設備)。 控制器 是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、地址,協調計算機各部分工作及內存與外設的訪問等。 運算器 對數據進行各種算術運算和邏輯運算,即對數據…

    Linux干貨 2016-08-15
  • linux命令格式,獲取幫助及其目錄結構簡要理解

    我們都知道,一臺計算機要是沒通電,和一堆廢鐵沒什么區別。那么,通電開機進入系統后,會進入交互界面,等待用戶操作,人與計算機交互界面有兩種: GUI:圖形用戶接口。如我們平時使用的Windows ?,linux的X window,有KDE和GOME.   CLI:命令行接口,使用的SHELL類型有bash ,csh,tcshell,zshell等。 …

    2017-09-14
  • 計算機的組成及功能

    計算機的組成及功能 計算機的組成 計算機的組成,簡單地來說,包含硬件和軟件兩部分,兩者相輔相成,缺一不可。在計算機網絡發展的今天,網絡也已成為計算機不可或缺的一部分。 計算機硬件 可以分為如下5個部分: 控制器 負責對程序的控制信息進行分析,控制并協調輸入、輸出操作或內存訪問,如CPU 運算器 負責數據的算術運算和邏輯運算,如C…

    Linux干貨 2016-10-29
  • 為你的網絡傳輸加把鎖(OpenSSL)

    互聯網形成的初期,更多關注的是設備之間通過網絡相互訪問功能的實現,我們都知道,兩個設備之間要想相互通信,就必需遵循某種協議,于是早期的互聯網也出現來眾多的協議,比如傳輸層最著名的協議就是tcp和udp,而應用層比較著名的協議有:http、ftp、pop、smtp、dns、telnet等等,而這些協議這開發初期,更多是關注功能的實現,數據這網絡上傳輸是明文方式…

    Linux干貨 2015-12-06

評論列表(1條)

  • 馬哥教育
    馬哥教育 2017-01-04 16:06

    腳本寫的很好,如果能在添加一些條件判斷的話,會更好,加油

欧美性久久久久