shell 腳本編程學習(四) 實例

上面幾篇我們已經把 shell 腳本的基礎內容學完了,現在可以通過一道練習題來實踐一下了。
利用 if 語句編寫一個名爲 filescript.sh 的腳本,該腳本將:
1. 從命令行獲得一個參數。這個參數應該是一個目錄路徑。如果沒有提供參數,那麼該程序將默認使用當前目錄。
2. 列出該目錄中的所有文本文件(名字中含有後綴 .txt 的文件)。
3. 列出文件名的同時,給用戶提供一些選項,他可以選擇顯示文件的大小、權限、所有者、組或者以上所有信息。以交互的方式實現這一步。

分析

用 $1 變量獲得命令行的第一個參數,test -d 可以判斷參數是否表示一個目錄。ls 加 grep 的組合可以列出目錄中所有的文本文件。read 命令可以以交互的方式詢問用戶是否需要顯示額外信息,爲了獲得額外信息用 ls -l 再用 awk 篩選需要的字段。利用變量和控制結構將這些功能串聯起來即可滿足題目的要求。

代碼

#!/bin/bash

# Beginning Unix 13.6 page 203
# chongjian.mo on 2017-12-12

# get path
path='.'
if [ -d $1 ]; then
    path=$1
fi

# ask if user need additional info
echo 'want additional info?'
echo '0=no 1=size 2=permission 3=owner 4=group 5=all'
field=''
read opt
if [ $opt = 1 ]; then # size
    field='$9" "$5'
elif [ $opt = 2 ]; then # permission
    field='$9" "$3'
elif [ $opt = 3 ]; then # owner 
    field='$9" "$4'
elif [ $opt = 4 ]; then # group
    field='$9" "$1'
elif [ $opt = 5 ]; then # all
    field='$9" "$5" "$3" "$4" "$1'
else # only name
    field='$9' 
fi

# use ls -l + grep + awk to print result
ls -l $path | grep '\.txt' | awk "{print $field}"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章