背景知識
Shell 是用戶與內核進行交互操作的一種接口,是 linux 最重要的軟件之一。目前最流行的 Shell 稱為 bash Shell,bash Shell 腳本編程以其簡潔、高效而著稱,多年來成為 Linux 程序員和系統管理員解決實際問題的利器。Shell 是操作系統的最外層。Shell 合并編程語言以控制進程和文件,以及啟動和控制其它程序。Shell 通過提示您輸入,向操作系統解釋該輸入,然后處理來自操作系統的任何結果輸出來管理您與操作系統之間的交互。Shell 提供了與操作系統通信的方式。此通信以交互的方式(來自鍵盤的輸入立即操作)或作為一個 Shell 腳本執行。Shell 腳本是Shell 和操作系統命令的序列,它存儲在文件中。當登錄到系統中時,系統定位要執行的 Shell 的名稱。在它執行之后,Shell 顯示一個命令提示符。普通用戶的此提示符通常是一個 $(美元符)。當提示符下輸入命令并按下 Enter 鍵時,Shell 對命令進行求值,并嘗試執行它。取決于命令說明,Shell 將命令輸出寫到屏幕或重定向到輸出。然后它返回命令提示符,并等待您輸入另一個命令。命令行是輸入所在的行,它包含 Shell 提示符。每行的基本格式如下:
$ 命令 參數(一個或多個)
Shell 視命令行的第一個字(直到第一個空格)為命令,所有后繼字為自變量。
在此推薦大家使用zsh,具體下載安裝版本請參考http://macshuo.com/?p=676
1:判斷文件是否為塊設備或字符設備文件,如果是將其拷貝到/dev 目錄下
1、read 命令從鍵盤或文件中讀入信息,將其賦給變量(一個或多個),直到遇到回車符或文件結束符為止?! ?、I/O 設備大致分為兩類:塊設備和字符設備。塊設備將信息存儲在固定大小的塊中,每個塊都有自己的地址。數據塊的大小通常在 512字節到 32768 字節之間。塊設備的基本特征是每個塊都能獨立于其它塊而讀寫。磁盤是最常見的塊設備。
#!/bin/bashread -p "please input a filename:" filenameif test -b "$filename" -o -c "$filename";then echo "$filename is a device file" && cp $filename /develse echo "$filename is not a device file"fi
2:模擬 Linux 登陸 Shell
#!/bin/bashx=wj #這是用戶名y=1111 #這是密碼read -p "please input yourname:" yournameread -p "please input yourkey:" yourkeyif test "$x" = "$yourname" -a "$y" = "$yourkey" ;then bash #注意test后面比較大小的空格不能省else echo"please try again" fi
3:從鍵盤讀取兩個數,并比較兩個數大小,并打印結果
#!/bin/bashread -p "please input num1:" num1read -p "please input num2:" num2if test $num1 = $num2 ;then echo "num1=num2"elif test $num1 -gt $num2 ;then echo "num1>num2"else test $num1 -lt $num2 echo "num1<num2"fi
4:查找/root/目錄下是否存在指定文件
#!/bin/bashcd /rootread -p "please input filename:" filenameif test -e $filename;then echo "$filename is exist"else echo "$filename is not exist"fi
5:刪除當前目錄下大小為 0 的文件
#/bin/bashfor filename in `ls` do if test -d $filename;then b=1 else a=$(ls -l $filename | awk '{ PRint $5 }') if test $a -eq 0;then rm $filename fi fidone
6:查找最大文件
#!/bin/basha=0for name in *do if test -d $name;then c=1 else b=$(ls -l $name | awk '{print $5}') if test $b -ge $a;then a=$b namemax=$name fi fidoneecho "the max file is $namemax"
7:打印當前用戶(不用 whoami)
#!/bin/bashecho "Current User is :"echo $(who | sed -n '1p' | awk '{print $1}')
8:查找當前目錄中所有大于 50k 的文件,把這些文件名寫到一個文本文件中,并統計其個數
wc 命令的功能為統計指定文件中的字節數、字數、行數,并將統計結果顯示輸出
#!/bin/bashfind ./ -size +50k > toingji.txt cat #txt |wc -l
9:一個函數,利用 shift 計算所有參數乘積,假設參數均為整數
1、expr 命令為 Linux 中的命令,一般用于整數值計算,但也可用于字符串操作。
2、對于某個命令行參數,其參數個數可以不固定,但是可以通過$*或$@進行循環操作。若用戶要求 Shell 在不知道變量個數的情況下,還能逐個處理參數,也就是在$1 之后是$2,$2 之后是$3。在未運行shift 命令之前$1 是可用的,當使用 shift 命令之后,原來的$2 會變成$1,并且原有的$1 變得不可用,通過$#命令獲得的參數個數也會少1
3、shift:用于左移命令行參數
#!/bin/bashresult=1# $#表示參數個數while test $# -gt 0do result=`expr $1 /* $result` shiftdoneecho "the result is $result"
10:測試一個文件是否已經被排序過
#!/bin/bashread -p "please input your filename:" filesort -C $file# $?表示執行上一個指令的返回值 (顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤)a=$? if test $a -eq 0 ;then echo "$file is youxu" else echo "$file is wuxu" fi
11:判斷用戶是否在運行
#!/bin/basha=$(ps | grep "$$" | awk '{print $2}')b=$( who| grep "$a" | awk '{print $1}')read -p "please input a username:" usernameif [ "$b" = "$username" ];then echo "the ueser is running"else echo "the ueser is not running"fi
12:在當前目錄下交互式創建文件夾(文件夾已存在則打印提示輸入新名字)
#!/bin/bashread -p "please input dirname:" fileif test -d $file;then echo dir is exist please try againelse read -p "create dir now?[y/n] " sel if test "$sel" = "y";then mkdir $file elif test "$sel" = "n";then bash else echo "Your input is wrong" fifi
13:獲取本機 ip 地址
#!/bin/basha=$(ifconfig | grep "inet 地址:" | awk '{print $2}' | sed 's/地址://g' |sed -n '1p' )echo "ip is $a"
14:打印無密碼用戶
#!/bin/bashecho "no passwd user are:"a=$(sudo cat /etc/shadow | grep "*" | awk 'BEGIN { FS=":" }{print $1}')#在處理輸入文件以前,域分隔符(FS)被設為冒號echo $a
15:寫一個腳本,利用循環計算 n的階乘
#!/bin/bashread -p "please input n:" nsum=1for a in `seq 1 $n`do sum=`expr $sum /* $a`doneecho "n! = $sum"
16:利用 case 語句測試輸入字符是否是:小寫/大寫/數字/其他
#!/bin/bashread -p "please input something:" Keycase $Key in [[:lower:]]) echo "It is lowercase";; [[:upper:]]) echo "It is uppercase";; [0-9]) echo "It is number";;esac
17:測試文件是否包含特定的文本內容
#!/bin/bashread -p "enter a string: " stringread -p "enter a filename: " filenamegrep -q "$string" $filename #在file中查找str(不輸出找到的內容),成功返回0if test $? -eq 0;then echo "The text exists in the file"else echo "Text does not exist in the file"fi
18:檢測給定的單詞是否為詞典中的單詞
#!/bin/bashread -p "enter a string:" string#/usr/share/dict/american-english是Ubuntu 系統中英式英語常用單詞列表的字典文件
grep -q "$string" /usr/share/dict/american-englishif test $? -eq 0;then echo "match directionary"else echo "not match directionary"fi
新聞熱點
疑難解答