N25-第九周博客作業

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

#!/bin/bash
# 統計登錄用戶和非登陸用戶的個數
# author: han

declare -i loginnum=0
declare -i nologinnum=0

while read line;do
        if [[ "${line}" =~ "/sbin/nologin" ]];then
                let nologinnum++
        else
                let loginnum++
        fi
done < /etc/passwd

echo "可登錄shell用戶數: $loginnum"
echo "非登陸sheel用戶數: $nologinnum"

執行結果: 
[root@localhost scripts]# bash loginshell.sh
可登錄shell用戶數: 8
非登陸sheel用戶數: 19

驗證: 
[root@localhost scripts]# grep "/sbin/nologin$" /etc/passwd | wc -l
19
[root@localhost scripts]# grep -v "/sbin/nologin$" /etc/passwd | wc -l
8

2、寫一個腳本

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

#!/bin/bash
#description: 顯示當前主機名

hostname=$(hostname)
# 因為默認主機名是"localhost.localdomain",所以做了模式匹配
if [[ "$hostname" =~ "localhost" ]];then
        hostnamectl set-hostname www.magedu.com && echo "主機名已修改"
else
        hostname && echo 主機名未修改""
fi


執行結果: 
[root@localhost scripts]# bash hostname.sh 
主機名已修改
[root@localhost scripts]# hostname
www.magedu.com
[root@www scripts]# bash hostname.sh 
www.magedu.com
主機名未修改

3、寫一個腳本,完成如下功能

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

#!/bin/bash
#description: 顯示磁盤所有分區信息
#author: han

if [ $# -lt 1 ];then
        echo "請輸入一個磁盤路徑"
        exit 1
fi

if [ -b $1 ];then
        fdisk -l $1
else
        echo "文件不存在或不是磁盤文件"
fi

執行結果: 
[root@www scripts]# bash disk.sh /dev/sda

磁盤 /dev/sda:107.4 GB, 107374182400 字節,209715200 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x000a61b9

   設備 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1050623      524288   83  Linux
/dev/sda2         1050624   105908223    52428800   83  Linux
/dev/sda3       105908224   126879743    10485760   83  Linux
/dev/sda4       126879744   209715199    41417728    5  Extended
/dev/sda5       126881792   128929791     1024000   82  Linux swap / Solaris
/dev/sda6       128931840   149903359    10485760   83  Linux

[root@www scripts]# bash disk.sh /dddd
文件不存在或不是磁盤文件
[root@www scripts]# bash disk.sh /etc
文件不存在或不是磁盤文件

4、寫一個腳本,完成如下功能

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

#!/bin/bash
#description:判斷接收的參數,決定下面的行為
#author: han

if [ $# -lt 1 ];then
        echo "請輸入一個參數"
        exit 1
fi

case $1 in
quit)
        echo "退出腳本"
        exit 0
        ;;
yes)
        echo "繼續執行腳本"
        ;;
*)
        exit 2
        ;;
esac

執行結果:
[root@www scripts]# bash ajust.sh quit
退出腳本
[root@www scripts]# bash ajust.sh yes
繼續執行腳本
[root@www scripts]# bash ajust.sh ok
[root@www scripts]#

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
#description: 根據參數選擇合適的工具進行歸檔壓縮
#han
[ $# -lt 1 ] && echo "請輸入一種壓縮工具" && exit 1

if [ ! -d /backups ];then
        mkdir /backups
fi

case $1  in
gzip)
        tar zcf /backups/etc-`date +%Y%m%d`.tar.gz /etc
        ;;
bzip2)
        tar jcf /backups/etc-`date +%Y%m%d`.tar.bz2 /etc
        ;;
xz)
        tar Jcf /backups/etc-`date +%Y%m%d`.tar.xz /etc
        ;;
*)
        echo "錯誤壓縮工具"
        exit 2
esac

執行結果:
[root@www scripts]# bash compress.sh 
請輸入一種壓縮工具
[root@www scripts]# bash compress.sh ddd
錯誤壓縮工具
[root@www scripts]# bash compress.sh gzip
tar: 從成員名中刪除開頭的“/”
[root@www scripts]# bash compress.sh bzip2
tar: 從成員名中刪除開頭的“/”
[root@www scripts]# bash compress.sh xz
tar: 從成員名中刪除開頭的“/”
[root@www scripts]# ls /backups/
etc-20170220.tar.bz2  etc-20170220.tar.gz  etc-20170220.tar.xz

6、寫一個腳本,接受一個路徑參數:

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

#!/bin/bash
#description: 判斷文件類型
#author: han

[ $# -lt 1 ] && echo "請輸入一個路徑參數" && exit 1

#注意對符號鏈接的判斷需放在普通文件前面,否則會被識別為普通文件
if [ -h $1 ];then
        echo "$1是個訪問路徑"
elif [ -f $1 ];then
        echo "$1可被正常訪問"
elif [ -d $1 ];then
        echo "$1可以使用cd命令"
else
        echo "無法判斷"
fi

執行結果:
[root@www scripts]# bash filetype.sh 
請輸入一個路徑參數
[root@www scripts]# bash filetype.sh /etc/inittab 
/etc/inittab可被正常訪問
[root@www scripts]# bash filetype.sh /etc/
/etc/可以使用cd命令
[root@www scripts]# bash filetype.sh /etc/sysconfig/selinux 
/etc/sysconfig/selinux是個訪問路徑
[root@www scripts]# bash filetype.sh /dev/sda
無法判斷

7、寫一個腳本,取得當前主機的主機名,判斷

(1) 如果主機名為空或為localhost,或為”(none)”,則將其命名為mail.magedu.com;
(2) 否則,顯示現有的主機名即可;

#!/bin/bash
#descriptions: 判斷主機名
#author: han

hostname=`hostname`

if [[ -z "$hostname" ]] || [[ "$hostname" =~ "localhost" ]] || [[ "$hostname" == "(none)" ]];then
        hostnamectl set-hostname mail.magedu.com && echo "主機名已修改"
else
        hostname && echo "主機名未修改"
fi

執行結果:
[root@www scripts]# hostname
mail.magedu.com
[root@www scripts]# bash hostname2.sh 
mail.magedu.com
主機名未修改
[root@www scripts]# hostname localhost.localdomain
[root@www scripts]# bash hostname2.sh 
主機名已修改
[root@www scripts]# hostname
mail.magedu.com  

注意: 
1. centos7 配置該"(none)"時報錯, 因為小括號為非法字符
[root@www scripts]# hostname "(none)"
hostname: the specified hostname is invalid
2. 在centos6上運行成功,hostnamectl改為hostname命令即可  
3. 表達式兩邊需加空格,在這兒浪費了很長時間

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

(0)
hansjhansj
上一篇 2017-02-23
下一篇 2017-02-24

相關推薦

  • LINUX系統文件類型分類

    使用LINUX過程中,時常會對文件進行操作。但是linux中文件究竟有哪些分類呢?今天讓我們大家來總結一下吧! 概述:         linux文件可以分為五種類型,分別為:普通文件、目錄、字符設備或塊設備、套接口文件、符號鏈接文件。下面詳細介紹這幾種文件。 1 普通文件[root@lo…

    Linux干貨 2017-07-22
  • 磁盤分區磁盤管理及掛載

    磁盤分區 fdisk提供交互式接口管理分區,操作均在內存中完成,沒有直接同步到磁盤;直到使用w命令保存至磁盤中。 語法: 1.查看分區使用信息:     fdisk -l [-u] [device…]:列出指定磁盤設備上的分區情況; 2.管理分區    fdisk d…

    Linux干貨 2016-08-31
  • grep命令與正則表達式

    grep命令與正則表達式 什么是grep:         grep (縮寫來自Globally search a Regular Expression and Print)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。Unix的…

    Linux干貨 2017-04-08
  • 【職位推薦】華圖網校/北京/運維工程師/8-12k(14薪)

    北京華圖宏陽網絡科技有限公司 華圖教育集團:       華圖教育(www.huatu.com)是華圖宏陽股份旗下品牌,擁有遍布全國的100余家分支機構。主要產品包括中央和地方公務員招錄考試輔導,事業單位、三支一扶、村官、選調生、招警等考試輔導。      北京華圖宏陽教育文化發展股份有限…

    Linux干貨 2016-04-20
  • 企業面試題

    要求: 將一下數據進行排序(字母部分已小到大排序) 101.37.8.249 wz417-419/wz119-125/wz7-16/wz571/wz544/wz1-6101.37.21.19 wz545/wz453-456/wz441-444116.62.4.21 wz106-118/wz514-516/wz581/wz190-199/wz572101.37…

    Linux干貨 2017-06-27
  • Linux bash中命令執行狀態返回值

    Linux bash中命令執行狀態返回值 在操作系統中,命令的執行后輸出的內容為命令執行結果輸出,而這個命令本身是否執行成功,它是通過命令執行狀態返回值來標識的。 常用的值: 0 表示命令執行成功非0 表示命令執行失敗 bash中獲取命令執行狀態返回值的方法 在剛執行完一條指令后,使用echo $?取得上一條指令的命令執行狀態返回值,示例如下:  …

    Linux干貨 2016-11-06

評論列表(1條)

  • 馬哥教育
    馬哥教育 2017-03-15 01:23

    贊,寫的比較認真~繼續加油~

欧美性久久久久