You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:45:03