背景知識shell
對於 Linux 系統管理員來講,沒有比 shell 腳本編程更有用處的了。一般,Linux 系統管理員天天須要完成無數項任務,從監視系統磁盤空間和系統用戶到備份重要文件。Shell 腳本可讓系統管理員的工做變得很是輕鬆!使用簡單的 shell 腳本就能夠自動化執行全部基本的系統管理任務。編程
管理計算機是個複雜的工做,具體來講系統管理員要作如下幾方面的工做:
①設置整個計算機系統,包括硬件和軟件,如安裝硬件設備、安裝操做系統和應用軟件、爲用戶建立帳戶、分配系統資源等。
②作適時的備份及須要時的恢復。
③操做系統、應用軟件、系統網絡的升級以及平常維護。
④爲用戶提供常規支持。
在這些管理工做中, 若是能合理使用 shell 工具將使管理工做變得簡潔有效,從而能極大地提升管理效率。bash
一、查看當前目錄的父目錄網絡
#!/bin/bash a=$(pwd) echo ${a%/*}
#!/bin/bash
# awk 'NR!=1表示去除第一行' ls -l | awk 'NR!=1' |sort -n -k5>jishu #awk'NR!=1'把第一行的總用量去掉 sort -k5把第五列排序 cat jishu
3:在當前目錄下建立一個test_mkdir目錄,在新建目錄中建立一個文件test_file工具
#!/bin/bash read -p "please input test_mkdir:" dir if test -e $dir;then echo "dir is exist" exit elif test "$dir" != "test_mkdir";then echo "please input correct dir name" rm -rf $dir else mkdir $dir && cd $dir && touch test_file fi
4:讀取文件的每一行(while) spa
#!/bin/bash read -p "please input your file : " file cat $file | while read line do echo $line done
5:讀取文件的每一行(for),並將小寫字母轉爲大寫字母。操作系統
#!/bin/bash read -p "input filename :" file for line in $(cat $file) #$(cat $file)獲得file的內容 do upper=$(echo $line|tr '[a-z]' '[A-Z]') #獲得每一行並轉化爲大寫 echo $upper #輸出 done
#!/bin/bash a="/var/log/boot.log" echo "目錄名是:${a%/*}" echo "文件名是:${a##*/}" echo "擴展名是:${a##*.}" # */ 表示/前面全部的內容 # /* 表示/後面全部的內容 # *. 表示.前面全部的內容 # .* 表示.後面全部的內容
7:將/var/log目錄歸檔壓縮到~/backup目錄中設計
#!/bin/bash mkdir backup ls /var/log tar -czvf ~/backup/log.tar.gz /var/log
ps:tar經常使用命令選項code
-c:建立 .tar 格式的包文件blog
-x:解開.tar格式的包文件
-v:輸出詳細信息
-z:調用gzip程序進行壓縮或解壓
-C:解包時指定釋放的目標文件夾
-j:調用bzip2程序進行壓縮或解壓
-f:表示使用歸檔文件
-p:打包時保留原始文件及目錄的權限
-t:列表查看包內的文件
8:將上一任務的log.tar.gz解壓到/tmp中,並刪除log.tar.gz文件
#!/bin/bash ls /var/log tar -xzvf ~/backup/log.tar.gz -C /tmp rm /home/wj/backup/log.tar.gz
#!/bin/bash ps -aux | awk '{print $3,$11}' | sort -nr -k 1 | head -5
10:設計一個shell程序,添加一個新組爲class1,而後添加屬於這個組的30個用戶,用戶名從stu1至stu30
#!/bin/bash i=1 groupadd class1 while [ $i -le 30 ] do USERNAME=stu${i} useradd -G class1 $USERNAME i=$(($i+1)) done
11:編寫shell程序,實現自動刪除5個帳號的功能。帳號名爲stu1至stu5
#!/bin/bash i=1 while [ $i -le 5 ] do userdel -r stud${i} i=$(($i+1 )) done
12:在/userdata目錄下創建5個目錄,即user1~user5
#!/bin/bash i=1 while test $i -le 5 do mkdir -p /userdata/user"$i" i=$(($i+1)) done
13:設置上一個任務所創建的5個目錄(user1~user5)的權限,其中其餘用戶的權限爲:讀;文件全部者的權限爲:讀、寫、執行;文件全部者所在組的權限爲:讀、執行
#!/bin/bash i=1 while test $i -le 5 do sudo chmod 754 /userdata/user"$i" i=$(($i+1)) done
14:得到環境變量PATH下全部目錄包含的文件個數
#!/bin/bash mypath=$(echo $PATH | sed 's/://g') totalcnt=0 cnt=0 for dir in $mypath do lst=$(ls $dir) cnt=0 for item in $lst do cnt=$(($cnt+1)) done echo "$dir :$cnt" totalcnt=$(($totalcnt+$cnt)) done echo $totalcnt
15:找出/路徑裏面大小排名前十的文件
sort默認是升序排列,-k是根據列來排列,-n按數值排序
#!/bin/bash ls -Rl / 2>/dev/null|awk '{print $5,$9}'|sort -k1 -nr|head -10 # ls -Rl後的第一個/是表示從根目錄下找 沒有表示從當前目錄下找 # 2>/dev/null表示把須要權限的警告放到/dev/null下
16:將當前目錄下大於10K的文件/目錄拷貝到/tmp目錄下(用du命令)
du 的英文爲:disk usage,含義是磁盤空間使用狀況,功能是逐級進入指定目錄的每個子目錄並顯示該目錄佔用文件系統數據塊的狀況,若是沒有指定目錄,則對當前的目錄進行統計。
#!/bin/bash for file in `du -a |awk '$1>10240'` do cp $file /tmp done ls -l /tmp
17:將當前目錄下大於10K的文件/目錄拷貝到/tmp目錄下(用find命令)
#!/bin/bash for file in `find ./ -size +10240` do cp $file /tmp done ls -l /tmp
或者
#!/bin/bash for file in `ls -l` do find . -size +10k cp $file /tmp done
還有一篇shell,明天寫,累死了