BASH编写带校验的目录长列表输出脚本问题求助
BASH目录长列表脚本修正方案
现有代码的问题梳理
- 未实现命令行参数校验逻辑:要求的第一步“校验用户执行脚本时是否传入参数”的逻辑完全缺失,无法拦截提前输入参数的情况
- 输入内容未赋值给对应变量:
read -p命令没有指定存储变量,你后续判断用到的$DIRECTORY始终为空,所有目录校验逻辑都会失效 - ls命令前多余
echo关键字:echo ls -l "$DIRECTORY"只会打印命令文本,不会实际执行目录列表输出 - 冗余的目录存在判断:前面已经判断目录不存在就退出,不需要额外加
elif再次判断目录存在
修正后的完整代码
#!/bin/bash # File Name: dlist # Usage: dlist prompt: [/directory/path/here] # Synopsis: The dlist script will prompt the user to input a directory path and will # return a long listing of the contents in that directory. # Author: Romero # 校验命令行是否有传入参数,有则输出错误并退出 if [ $# -ne 0 ]; then echo "错误:执行该脚本时不需要传入任何参数,请直接运行脚本后按提示输入目录路径" 1>&2 exit 1 fi # 提示用户后续需要输入目录 echo -e "You will be prompted to enter the name of a directory you want to list in long form. " # 读取用户输入的目录路径,赋值给DIRECTORY变量 read -p "Directory to list: " DIRECTORY # 校验目录是否存在,不存在则输出错误退出 if [ ! -d "$DIRECTORY" ]; then echo "错误:该目录不存在!" 1>&2 exit 2 fi # 目录存在则输出长列表 ls -l "$DIRECTORY"
修改点说明
- 新增参数校验逻辑:用
$#获取命令行传入的参数数量,不等于0就抛出错误退出,退出码为1符合需求 - 给
read命令补充变量赋值:将用户输入的内容直接存入$DIRECTORY变量,后续校验和调用都能正常获取值 - 移除ls前的echo:直接执行
ls -l "$DIRECTORY"输出目录长列表 - 简化判断逻辑:去掉冗余的elif判断,目录校验不通过直接退出,通过就走后续执行逻辑,代码更简洁
内容的提问来源于stack exchange,提问作者romeronstephen
相关产品推荐
相关产品推荐

