今天写第二个shell脚本,写一下《私房菜》里的课后题。该题需要写一个检查某一个名称是否存在,不存在则创建一个文件;存在则需要判断下该名称是否文件,是文件则删除后建一个同名目录,如果是目录则将此目录删除。
先设立一个基础条件:操作目录为/tmp/test/(注:如果此目录不存在则需要手动创建),需要建立的文件或目录名称为logical。
下边开始写脚本。
#!/bin/bash #Program: # This program to check if a filename exists . #History #2016/04/08 MG First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/sbin:~/bin export PATH echo -e "正在检查/tmp/test/logical是否存在,请稍后..." test -e "/tmp/test/logical" && state=0 || state=1 path="/tmp/test" filename="logical" case $state in "1") echo "该文件不存在,正在创建..." mkdir -p $path && touch "$path/$filename" echo "文件创建成功!" ;; *) test -d "$path/$filename" && statu=0 || statu=1 if [ "$statu" == "0" ];then echo "$filename 存在且为目录。" rm -rf "$path/$filename" echo "已将该目录删除!" else echo "$filename 存在且为文件,正在删除并建立同名目录" rm -f "$path/$filename" && mkdir "$path/$filename" echo "正在创建请稍后..." echo "$filename 目录已经建立!" fi ;; esac
简单说明下,写脚本的逻辑。通过test -e命令来判断 "logical" 名是否存在,如果不存在状态设为"1",并根据题目创建文件。如果存在则通过test -d命令来判断是否为目录,如果是目录将其状态设为0,并将该目录通过rm -rf 命令来删除(注:如果不加-r参数无法删除目录,所以需要加入-r参数);如果是文件则通过rm -f 命令将文件删除,通过mkdir 命令来创建同名目录(注:“命令1 && 命令2”的写法的意思是如果命令1执行成功才继续执行命令2)。
该脚本功能还是相对简单,会有些不足之处,继续努力改进吧。
本文出自 “积小流,成江海” 博客,请务必保留此出处http://goodjoe.blog.51cto.com/9173556/1761796
原文地址:http://goodjoe.blog.51cto.com/9173556/1761796