N22-第九周作業

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

#!/bin/bash
#
declare -i log_user
declare -i notlog_user
while read line;do
    usershell=$(echo $line | cut -d: -f7)
    if [[ "$usershell" == "/sbin/nologin" ]];then
        let notlog_user++
    else
        let log_user++
    fi
done < /etc/passwd    
echo "There are $log_user users can log on,$notlog_user users need not log on."

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

#!/bin/bash
#
hostname=$(hostname)
if [[ $hostmame == "localhost" ]];then
    hostname www.magedu.com
else
    hostname
fi

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

```
#!/bin/bash
#
if fdisk -l | grep "^Disk $1\>" &> /dev/null;then
    fdisk -l $1
else
    echo "This disk is not exists."
fi
```

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

```
#!/bin/bash
#
while true;do
    read -p "please enter a option:" opt
    if [[ $opt == "quit" ]];then
        echo "Exit normally." && exit 0
    elif [[ $opt == "yes" ]];then
        echo "di again."
    else
        exit 2
    fi
done
```

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 zcf /backups/etc-20160613.tar.gz /etc/* &> /dev/null
elif [[ $1 == "bzip2" ]];then
    tar jcf /backups/etc-20160613.tar.bz2 /etc/* &>/dev/null
elif [[ $1 == "xz" ]];then
    tar Jcf /backups/etc-20160613.tar.xz /etc/* &>/dev/null
else 
    echo "Wrong zip tools !" && exit 0
fi
```

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

```
#!/bin/bash
#
while true;do
    read -p "Give a dir:" opt
    if [[ -f $opt ]];then
        echo "It is a normal file."
    elif [[ -d $opt ]];then
        echo "It is a directory."
    elif [[ -h $opt ]];then
        echo "It is a sybo link."
    elif [[ $opt == "quit" ]];then
        exit 0
    else 
        echo "can not recognize."
    fi
done
```

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

```
#!/bin/bash
#
hos=$(hostname)
if [[ $hos == "(none)" ]] || [[ $hos == "loaclhost" ]] || [[ $hos == " " ]];then
    hostname mail.magedu.com
else
    hostname
fi
```

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

```
#!/bin/bash
#
if [ $(id -u $1) -eq 0 ];then
    echo "sys admin."
elif [ $(id -u $1) -gt 500 ];then
    echo "normal user."
else
    echo " sys user."
fi
```

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

```
#!/bin/bash
#
read -p "Enter a user:" opt
if [ $(id -u $opt) -ge 500 ] && awk -F: '/$opt/{print $7}' /etc/passwd | grep "sh$" &> /dev/null;then
    echo "User $opt can log system."
else
    echo "$opt can not log on."
fi
```

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

```
#!/bin/bash
#
declare -i i=1
for file in /var/log/*;do
    mkdir /tmp/test$i
    if [[ -d $file ]];then
        cp -r $file /tmp/test$i
        let i++
    elif [[ -f $file ]];then
        cp $file /tmp/test$i
        let i++
    elif [[ -h $file ]];then
        cp -d $file /tmp/test$i
        let i++
    else
        cp -a $file /tmp/test$i
        let i++
    fi
done
```

原創文章,作者:上海-brown,如若轉載,請注明出處:http://www.www58058.com/52854

(0)
上海-brown上海-brown
上一篇 2016-10-24 09:11
下一篇 2016-10-24 09:12

相關推薦

  • mysql復制與備份

    備份策略: 完全+差異+binlog 完全+增量+binlog binlog最好能實時備份到另一個節點上。 完全備份,多久一次? 數據變化量:有20%,建議使用完全備份。 可用的備份存儲空間: 數據變化量很大,可以每天做一個完全備份,每周做一次增量備份。 數據變化量不大,可以每月做一次完全備份,每天做一次增量或者差異。 數據 備份工具: mysqldump:…

    Linux干貨 2016-12-05
  • iptables

    練習:基于狀態放行telnet, ftp, ssh, http, samba, icmp等服務 (1) 對本機的ping請求每分鐘不得超出20個 (2) 每客戶端對本機的ssh的并發連接數不得超過3個 (3) 本機的telnet服務僅允許工作時間內訪問 [root@node1 ~]# vim iptables.sh iptabl…

    Linux干貨 2016-10-22
  • sed命令初識

    ? ? ? ?sed是一種流編輯器,它是文本處理中非常常用的工具,能夠配合正則表達式使用。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有 改變,除非你使用重定向存儲輸出。Sed主要用來自…

    Linux干貨 2017-12-03
  • memcached簡析

    一. memcached簡介      memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in    &nbs…

    2016-10-29
  • Linux運維學習歷程-第一天-基礎知識

    什么是Linux   Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNIX工具軟件、應用程序和網絡協議。它支持32位和64位硬件。Linux繼承了Unix以網絡為核心的設計思想,是一個性能穩定的多用戶網絡操作系統。 為什么學Linux…

    Linux干貨 2016-08-03
  • 解決Redis 延遲故障

    前一段時間redis客戶端在使用php connect 連接redis 的經常報一個redis server went away 等信息。 首先想到的想到的是reids超時設置的問題,timeout、tcp-keepalive、以及php的default_socket_timeout時間  127.0.0.1:6381> CONFI…

    Linux干貨 2016-02-14

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-11-02 14:43

    博客寫得非常的好,32個贊,腳本思路清晰,加油!

欧美性久久久久