zoukankan      html  css  js  c++  java
  • 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语言中文网

  • 相关阅读:
    初识函数作业
    HTTP协议那些事儿(Web开发补充知识点)
    文件操作
    文件操作作业
    深浅拷贝
    深浅拷贝作业
    小数据池 is和== 再谈编码
    小数据池/is和==/再谈编码作业
    如何用好 github 中的 watch、star、fork
    Navicat Premium Mac 12 破解(亲测可用!!!)
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/10534386.html
Copyright © 2011-2022 走看看