Linux基礎知識——SHELL之循環

1、寫一個腳本,判斷當前系統用戶shell是否都為可登陸shell(即非/sbin/nologin),分別計算兩類用戶的個數(通過比較字符串實現)

#!/bin/bash
#       check the user could login by default or not,and how many it is 
#       20161211
declare logini
declare nologinj
for ((i=1;i<=$(cat /etc/passwd|wc -l);i++))
do
defaultshell=$(head -$i /etc/passwd|sed '$!d'|cut -d':' -f7)
        if [ $defaultshell == /sbin/nologin ];then
        logini=$(($logini+1))
        else
        nologinj=$(($nologinj+1))
        fi
done
        echo "the default login_user has $logini,the others has $nologinj"

或者

#!/bin/bash
#
#

declare nologini
declare othersj

for ((i=1;i<=$(cat /etc/passwd|wc -l);i++))
do

if [ $(head -$i /etc/passwd|sed '$!d'|sed 's/^.*://') == /sbin/nologin ]
   then
    nologini=$(($nologini+1))
else
    othersj=$(($othersj+1))
fi

done
echo "the default login users is $nologini,the others is $othersj"

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

#!/bin/bash
#   check the $HOSTNAME if it's localhost,then change it to www.mageedu.com ;else display it
#   20161212

hostname=$(hostname)
if [ $hostname == localhost ] ||[ $hostname == localhost.localdomain ]
then 
    hostname "www.mageedu.com"
    echo -e 'I change HOSTNAME is $hostname\n'
else
    echo -e $hostname
fi

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

#!/bin/bash
#       please input a device ,check if it's a block device ,so display the partition
#

read -p "Please input a block device,like:sda、sdb:" device

if [ -b /dev/$device ]
then
        echo "the $device is a block device:/dev/$device;and its partition like:"
        lsblk /dev/$device
else
        echo "$device is not exist!"
fi

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

#!/bin/bash
#       while you input 'quit',the shell exit 0;input 'yes' the shell continue;input other command the shell exit 1
#

read -p "please input yes,quit,*:" l 
case $l in   
        yes)
                echo "the shell end with no error"
                exit 0
        ;;
        quit)
                echo "the shell continue"
                continue
        ;;
        *)
                echo "the shell out within error"
                exit 1
        ;;
esac

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
#       tar /etc/* with bzip2,gzip,xz
#


if [ $# == 0 ]
        then
        echo " you must choose a option(like bzip2,gzip,xz)!"
        else
        case $1 in

        gzip)
                tar -czvf /backups/etc-20161212.tar.gz /etc/*
        ;;
        bzip2)
                tar -P -cjvf /backups/etc-20161212.tar.bz2 /etc/*     
        ;;
        xz)
                tar -Jcvf /backups/etc-20161212.tar.xz /etc/*
        ;;
        esac
        ls -al /backups
fi

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

#!/bin/bash
#   check the file or directory 's type
#   20161213

if [ $# -eq 0 ];then
   echo "you must insert a file or directory!"
elif [ -f $1 ];then
    echo "$1 is a file and you can read/write it"
elif [ -d $1 ];then
    echo "$1 is a directory,you can access it with COMMAND 'cd'"
elif [ -l $1 ];then
    echo "$1 is a link file"
else 
    echo "i can't fond what type it is"
fi

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

同題2

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

#!/bin/bash
#   check the user's type,it's operater or ordinery user
#   20161213

if [ $# -eq 0 ];then
    echo "Please input a username!just one"
elif `id -u $1>>/dev/null 2>&1`;[ $? != 0 ];then
    echo "the user $1 isn't fond" && exit 1
   elif [ `id -u $1` -eq 0 ];then
    echo "$1 is root"
   elif [ `id -u $1` -lt 500 ];then
    echo "$1 is a operator"
   else
    echo "$1 is a user"
   fi

9、寫一個腳本,傳遞一個用戶名參數給腳本;如果用戶的id號大于等于500,且其默認shell為以sh結尾的字符串,則顯示“a user can log system"類的字符串

#!/bin/bash
#   check user's ID greater than 500 and the last two character of the default SHELL is sh
#   20161213


if [ $# -eq 0 ];then
    echo 'Please insert a username!'
elif `id -u $1 >>/dev/null 2>&1`;[ $? != 0 ];then
    echo "The user isn't fond" 
elif [ $(id -u $1) -ge 500 ] && [ $(grep $1 /etc/passwd|sed 's/.*://'|grep -o "sh$") == sh ];then
    echo "The user $1 can login system"
else
    echo "The user'ID is $(id -u $1),the user cannt login"
fi

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

(0)
396064847396064847
上一篇 2016-12-13
下一篇 2016-12-13

相關推薦

  • N26_第一周作業

    一、描述計算機的組成及其功能。 計算機系統:是由硬件(Hardware)系統和軟件(Software)系統兩大部分構成。 1、硬件系統: 1)控制器(Control):是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、地址,協調計算機各部分工作及內存與外設的訪問等。2)運算器(Datapath):運算器的功能是…

    2017-02-20
  • iptables/netfilter入門到進階

    一、iptables/netfilter的簡介: iptables:規則管理工具;該系統工具有利于在 Linux 系統上更好地控制 IP 信息包過濾和防火墻配置。防火墻在做信息包過濾決定時,有一套遵循和組成的規則,這些規則存儲在專用的信息包過濾表中,而這些表集成在 Linux 內核中。在信息包過濾表中,規則被分組放在我們所謂的鏈(chain)中。而netfi…

    Linux干貨 2017-05-03
  • 馬哥教育網絡班28期—第1、2天知識點概略

    沒做隨堂筆記,根據記憶手打,看看自己能記住多少。

    Linux干貨 2017-12-03
  • 正則表達式及用戶管理命令

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 2、取出最后登錄到當前系統的用戶的相關信息。 3、取出當前系統上被用戶當做其默認shell的最多的那個shell。 4、將/etc/passwd中的第三個字段數值最大的后10個用戶的信息全部改為大寫后保存至/tmp/maxuser.txt文件中。 6、列出/etc目錄…

    2017-10-10
  • Liunx系統命令的使用格式

    Liunx系統命令的格式 基本格式如下:               ~]# COMMAND OPTIONS ARGUMENTS COMMAND:      發起一個命令,請求內核將某個二進…

    Linux干貨 2016-10-28
  • Linux內核介紹

                               Linux內核介紹 嚴格來講,Linux這個詞本身只表示Linux內核,但實際上人們已經習慣了用Linux來形容整個基于Linux內核,并且使用GNU工程各種工具和數…

    Linux干貨 2016-10-27

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-12-16 15:00

    腳本可以先運行下~~第2個腳本,犯了一個強弱引用的錯誤;第3個腳本,輸入 “yes” 和 “quit” 的執行結果和要求不一致;第3個腳本,漏掉了任意項;第7個腳本,建議動手換個方式實現下;等等
    不過整體看下來還是不錯的。加油~

欧美性久久久久