前言
如需使用本博文源码或者撰写文章,请注明博文来源:/johnnyzen/p/10534386.html,劳动所得,侵权必究。
题目
設計一個shell腳本:判斷當前工作目錄下所有的文件類型,如果是目錄,顯示目錄名;如果是文件,查看文件內容;如果都不是,則顯示提示信息。
源码
#!/bin/bash
# question:設計一個shell腳本:判斷當前工作目錄下所有的文件類型,如果是目錄,顯示目錄名;如果是文件,查看文件內容;如果都不是,則顯示提示信息。
# 對某目錄下所有文件類型的判定
directoryFilesType(){ #函數:bash shell中,函數也需:先聲明,後使用。
#文件目錄的初始化
dir='';
if [ -z $1 ] #如果未指定具體路徑時
then
dir='./'; #默認:當前路徑
else
dir=$1;
fi;
i=0; #標記行號
ls -l $dir | while read line #重定向法/管道法 實現 逐行讀取文本數據
do
i=`expr $i + 1`;
if [ $i -ne 1 ] #跳過首行,首行的信息無用,形如:“总用量 172”
then
case ${line:0:1} in #${line:0:1}:截取字符串line的第[0,1]之間的字符, 即 第一位字符,該位字符表示了文件類型
'-')printf "[file]\t\t";;
'd')printf "[directory]\t";;
'b')printf "[block]\t";;
*)printf "[unknown]\t";;
esac
fi
echo $line; #輸出當前行(包括本行的換行符\n)
done
}
#判斷某具體文件路徑下的“文件”類型是什麼。給定一條明確路徑,輸出文件類型
fileType(){
if [ -f $1 ]
then
type="file"; #$0:bash;$1才是首個參數,完整的文件路徑,形如:/etc/nginx/nginx.conf
elif [ -d $1 ]
then
type="directory";
elif [ -c $1 ]
then
type="character";
elif [ -b $1 ]
then
type="block";
else
type="unknown";
fi
echo the type of \"$1\" is [$type]
return 0; #可添加函數的返回值
}
#echo `fileType filePath`
#echo $? #讀取函數的返回數值(且只能爲數值類型,範圍:[0,255])
if [ -z $1] # -z string:如果字符串爲空,則:真。
then
curentFilesType #此時,直接執行:對當前工作目錄下所有文件類型的判定
else #參數不爲空,則:判斷參數提供的文件路徑的文件類型
fileType $1#此時,直接執行:給定一條明確路徑,輸出文件類型
fi;
exit 0;
输出
:<
总用量 172
[file]-rw-rw-r-- 1 johnny johnny 2073 3月 13 13:50 Apache Tomcat.md
[file]-rw-r--r-- 1 johnny johnny 822 3月 14 19:45 demo-01-file.sh
[file]-rw-r--r-- 1 johnny johnny 745 3月 14 19:30 demo-02-array.sh
[file]-rw-r--r-- 1 johnny johnny 573 3月 14 19:45 demo-02.sh
[file]-rwx------ 1 johnny johnny 302 3月 13 19:25 demo-bash.sh
[file]-rwxrwxrwx 1 johnny johnny 8600 3月 13 10:43 hello.out
[file]-rw-rw-r-- 1 johnny johnny 211 3月 13 11:08 h.txt
[file]-rw-rw-r-- 1 johnny johnny 87 3月 13 11:08 h.txt.bz2
[file]-rw-rw-r-- 1 johnny johnny 211 3月 13 11:08 h.txt.out
[directory]drwxrwxr-x 3 johnny johnny 4096 12月 25 Linux Shell
[file]-rw-rw-r-- 1 johnny johnny 4483 3月 13 15:25 nginx.md
[file]-rw-rw-r-- 1 johnny johnny 104 3月 13 18:15 text.txt
[file]-rw-r--r-- 1 johnny johnny 862 3月 14 19:20 tmp.txt
[file]-rw-rw-r-- 1 johnny johnny 108801 12月 13 实验二.png
EOF
重点难点
1.Shell编程基础:管道与重定向、函数、控制语句(if、for、while、case等)、字符串处理、数组操作、变量(特殊变量)
2.逐行操作(读取)文本
Shell脚本编程扩展小练习
题目
設計Shell腳本:求控制臺給定數字X-Y之間的整數和,其中X
答案
#!/bin/bash
# 設計Shell腳本:求控制臺給定數字X-Y之間的整數和,其中X
echo "please input interger X and Y [X < Y]:";
read X Y #從控制臺讀取變量X和Y
if [ $X -ge $Y ] #如果X大於等於Y:則 置換
then
t=$X;
X=$Y;
Y=$t;
fi;
sum=0;
x=$X; #x保留X的初始值
y=$Y; #y保留Y的初始值
while [ $X -le $Y ] #-le:小於等於≤
do
sum=`expr $sum + $X`;
X=`expr 1 + $X`;
done
echo sum of [$x,$y]:$sum;
推荐文献
[1] 《Linux系统及编程基础》唐晓君 主编
如果觉得《linux系统及编程基础唐晓君 Linux-Shell编程之判断文件类型》对你有帮助,请点赞、收藏,并留下你的观点哦!