Linux基礎之shell腳本編程(一)

本文主要是shell腳本編程練習

1、寫一個腳本

   (1)、獲取并列出當前系統上的所有磁盤設備;

   (2)、顯示每個磁盤設備上每個分區相關的空間使用信息;

  1 #!/bin/bash
  2 #author:BaoZhang
  3 #
  4 echo " all disk and partitions are: "
  5 for i in $(fdisk -l | grep -o "^/dev/sd.*" | cut -d" " -f1);
  6 do
  7         echo "$i"
  8         df -h $i
  9         echo -e "\n"
 10 done

2、寫一個腳本

   (1) 接受一個以上文件路徑作為參數;

   (2) 顯示每個文件擁有的行數;

   (3) 總結說明本次共為幾個文件統計了其行數;

  1 #!/bin/bash
  2 #author : BaoZhang
  3 #
  4 if [ $# -ne 1 ];then
  5   echo "usage : file_count /path/to/somedir/"
  6   exit 1
  7 fi
  8 cd $1 &>/dev/null
  9 if [ $? -ne 0 ];then
 10   echo "usage: file_count /path/to/somedir/"
 11   exit 2
 12 else
 13   file_number=$(ls -l $1 | wc -l)
 14   for i in $(ls $1);
 15   do
 16     echo "line number of $i is: $(cat $i |  wc -l)"
 17   done
 18 fi
 19 echo "all the file in $1 are : $file_number"
 20

3、寫一個腳本

   (1) 傳遞兩個以上字符串當作用戶名;

   (2) 創建這些用戶;且密碼同用戶名;

   (3) 總結說明共創建了幾個用戶;

  1 #!/bin/bash
  2 #author:BaoZhang
  3 #    
  4 new_user=0
  5 exist_user=0
  6 if [ $UID -ne 0 ];then
  7   echo "only root can add user"
  8   exit 1
  9 else
 10   if [ $# -lt 2 ];then
 11     echo "usage : user_add.sh username1 username2....,arguments must more then 2 username"
 12     exit 2
 13   else
 14     for i in $*;
 15     do
 16       id $i &>/dev/null
 17       if [ $? -eq 0 ];then
 18         echo "$i exist"
 19         exist_user=$[$exist_user+1]
 20         echo $i | passwd --stdin $i &>/dev/null
 21         echo "user $i changed the password"
 22       else
 23         useradd $i
 24         new_user=$[$new_user+1]
 25         echo $i | passwd --stdin $i &>/dev/null
 26         echo "user $i add"
 27       fi
 28     done
 29   fi
 30 fi
 31 echo "in the total , $new_user created, $exist_user change the password"

4、寫一個腳本,新建20個用戶,visitor1-visitor20;計算他們的ID之和;

  1 #!/bin/bash
  2 #author:BaoZhang
  3 #
  4 if [ $UID -ne 0 ];then
  5   echo "only root can add user"
  6   exit 1
  7 else
  8   for i in {1..20};
  9   do
 10     id visitor$i &>/dev/null
 11     if [ $? -eq 0 ];then
 12       echo "visitor$i exist "
 13     else
 14       useradd visitor$i
 15       echo "visitor$i add finished"
 16     fi
 17     #let sum+=$[$(cat /etc/passwd | awk -F: '{if ($1=="visitor$i") print $3}')]
 18     let sum+=$[$(id -u visitor$i)]
 19   done
 20 fi

5、寫一腳本,分別統計/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#號開頭的行數之和,以及總的空白行數;

  1 #!/bin/bash
  2 #author:BaoZhang
  3 #
  4 file1=/etc/rc.d/rc.sysinit
  5 file2=/etc/rc.d/init.d/functions
  6 file3=/etc/fstab
  7 for i in {$file1,$file2,$file3};
  8 do
  9   count1+=$[$(grep "^#" $i | wc -l)]
 10   count2+=$[$(grep "^[[:space:]]$" $i  | wc -l)]
 11 done
 12 echo " start with #  total line is: $count1 "
 13 echo " total  blank line is : $count2 "

6、寫一個腳本,顯示當前系統上所有默認shell為bash的用戶的用戶名、UID以及此類所有用戶的UID之和;

  1 #!/bin/bash
  2 #author:BaoZhang
  3 #
  4 echo "all users are :" 
  5 grep  "/bin/bash$" /etc/passwd | cut -d: -f1,3
  6 for i in $( grep  "/bin/bash$" /etc/passwd | cut -d: -f1,3 | cut -d: -f2);
  7 do
  8   let sum+=$[$i]
  9 done
 10 echo "the sum of  UID is: $sum"

7、寫一個腳本,顯示當前系統上所有,擁有附加組的用戶的用戶名;并說明共有多少個此類用戶;

  1 #!/bin/bash
  2 #author:BaoZhang
  3 #
  4 echo "all users are:"
  5 grep "," /etc/group | cut -d: -f1
  6 echo "total user count  are : $(grep "," /etc/group | cut -d":" -f1 | wc -l  )"

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

(0)
zhangbaozhangbao
上一篇 2016-11-11
下一篇 2016-11-11

相關推薦

  • 22期第十二周課堂練習

    1、請描述一次完整的http請求處理過程; (1)建立和處理連接:接收請求或者拒絕請求; (2)接收請求:接收來自于網絡上的主機請求報文中對某特定的資源的一次請求的過程; (3)處理請求:對請求報文進行解析,獲取客戶端請求的資源及請求方法等相關信息 (4)訪問資源:獲取請求報文中請求的資源 (5)構建響應報文; (6)發送響應報文; (7)記錄日志; 2、h…

    Linux干貨 2016-12-26
  • 馬哥linux 0728作業

    1,軟鏈接和硬鏈接的區別 硬鏈接有以下特性 1)文件有相同的 inode 及 data block; 2)只能對已存在的文件進行創建; 3)不能交叉文件系統進行硬鏈接的創建; 4)不能對目錄進行創建,只可對文件創建; 5)刪除一個硬鏈接文件并不影響其他有相同 inode 號的文件。 而軟鏈接有一下特性 1)軟鏈接有自己的文件屬性及權限等; 2)可對不存在的文…

    Linux干貨 2016-08-04
  • LAMP+logzilla+sphinx+syslog-ng實現集中日志管理(第一版)[原創]

    一、前言        目前查看系統日志比較被動,遇到系統不正常或故障時才會主動去檢查服務器系統日志,這樣一來不能及時了解系統的運行情況,因此部署Logzilla+sphine+syslog-ng來彌補這不足。以下為安裝、部署平臺詳細步驟。(Logzilla是什么新東西?其實前身就是php-syslog-ng,引用作者…

    Linux干貨 2015-03-27
  • 馬哥教育網絡班21期-第九周課程練習

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

    Linux干貨 2016-09-15
  • vim文本編輯器小結

    vi=vim打開文件 alias vi =vim vim -m 只讀方式打開文件 修改文件時則會無法保存   -b 二進制打開文件 -d file1 file2  比較兩個文件 Command(normal)默認模式:  ZZ 保存并退出 ZQ 不保存并退出Insert:編輯模式&nbsp…

    2017-08-05
  • OSI七層模型

      OSI模型的七層結構 首先,OSI是什么呢?OSI(Open System Interconnection),OSI是一個開放性的通行系統互連參考模型,是一個協議規范。它把網絡協議從邏輯上分為了7層。每一層都有相關、相對應的物理設備。OSI七層模型是一種框架性的設計方法 ,建立七層模型的主要目的是為解決異種網絡互連時所遇到的兼容性問題,其最主要…

    2017-09-02
欧美性久久久久