Bash脚本参数处理需求:实现单命令行参数的文件/目录判断与创建
我来帮你搞定这个Bash脚本,先梳理下你原代码里的几个小问题,再给你完整的可运行实现:
原代码的问题点
- 你用了
while read argument循环读入,但需求是接收单个命令行参数,直接用$1(第一个位置参数)就够了,不需要循环 - 文件测试的语法错了:正确格式是
[ 测试选项 "变量" ],比如判断目录应该是[ -d "$argument" ],不是[ $argument -d ] elif分支缺了then关键字,语法会报错- 用
-e的话会匹配所有存在的条目(包括目录),应该用-f专门判断普通文件 - 变量没加双引号,遇到带空格的参数会直接炸锅
完整的脚本实现
#!/bin/bash # 先检查是否提供了恰好一个命令行参数 if [ $# -ne 1 ]; then echo "请传入单个命令行参数" exit 1 fi # 把参数赋值给变量,加双引号处理特殊字符 target="$1" # 开始判断逻辑 if [ -d "$target" ]; then echo "Directory exists" elif [ -f "$target" ]; then echo "File exists" else # 尝试创建目录,并根据结果输出报告 if mkdir "$target"; then echo "目录创建成功" else echo "目录创建失败" exit 1 fi fi
关键细节说明
#!/bin/bash:指定脚本用Bash解释器执行,避免系统默认的sh可能带来的兼容性问题$#是命令行参数的数量,$# -ne 1用来确保用户只传一个参数- 所有变量都用双引号包裹,比如
"$target",这样即使参数是"my test folder"这种带空格的也能正常处理 mkdir "$target"直接放在if条件里,利用Bash命令的返回值判断:命令执行成功返回0,if会走成功分支;失败返回非0,走失败分支- 如果需要支持创建多级目录(比如
a/b/c),可以把mkdir改成mkdir -p "$target",-p参数会自动创建不存在的父目录
内容的提问来源于stack exchange,提问作者Spasitel
相关产品推荐
相关产品推荐

