• Linux-Shell编程之判断文件类型


    前言

      如需使用本博文源码或者撰写文章,请注明博文来源:https://www.cnblogs.com/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]		";;
    				'd')	printf "[directory]	";;
    				'b')	printf "[block]	";;
    				*)		printf "[unknown]	";;
    			esac	
    		fi
    		echo $line; #輸出當前行(包括本行的換行符
    )
    	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;

    输出

    :<<EOF #如果參數爲空時的輸出結果(當前工作路徑下的所有文件類型)
    总用量 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 2017 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 2017 实验二.png
    EOF  

    重点难点

      1.Shell编程基础:管道与重定向、函数、控制语句(if、for、while、case等)、字符串处理数组操作、变量(特殊变量

      2.逐行操作(读取)文本

    Shell脚本编程扩展小练习

    题目

      設計Shell腳本:求控制臺給定數字X-Y之間的整數和,其中X<Y。

    答案

    #!/bin/bash
    
    # 設計Shell腳本:求控制臺給定數字X-Y之間的整數和,其中X<Y。
    
    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系统及编程基础》唐晓君 主编

      [2] Linux Shell编程之变量与字符串处理 | 菜鸟教程

      [3] Linux命令大全 | 菜鸟教程

      [4] Linux学习入门教程 | C语言中文网

  • 相关阅读:
    HDU 1261 字串数(排列组合)
    Codeforces 488C Fight the Monster
    HDU 1237 简单计算器
    POJ 2240 Arbitrage
    POJ 3660 Cow Contest
    POJ 1052 MPI Maelstrom
    POJ 3259 Wormholes
    POJ 3268 Silver Cow Party
    Codesforces 485D Maximum Value
    POJ 2253 Frogger(最短路)
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/10534386.html
Copyright © 2020-2023  润新知