如何在bash的case语句中判断参数是否包含/以执行对应建目录逻辑
实现代码
#!/bin/bash case $1 in # 无传入参数场景 "" ) mkdir project ;; # 匹配完全不含斜杠的参数,对应当前目录创建目录需求 [^/]* ) mkdir -- "$1" ;; # 匹配含斜杠的路径参数,对应指定路径创建目录需求 * ) mkdir -p -- "$1" ;; esac
逻辑说明
- 第二个分支的
[^/]*是Shell原生Glob匹配规则:[^/]表示匹配任意非斜杠字符,*表示匹配0个或多个前面的规则,整体可以匹配所有完全不包含斜杠的非空参数,正好对应直接传入目录名的场景 - 代码中加入
--是为了防止参数以-开头时被识别为mkdir的命令选项 - 第三个分支
mkdir新增了-p参数,可自动创建不存在的父级目录,避免指定路径的上层目录不存在时报错 - 脚本完全兼容要求的三种调用语法:
- 无参数调用
./case.sh:默认在当前目录创建project目录 - 传纯目录名调用
./case.sh DIRECTORYNAME:在当前目录创建对应名称的目录 - 传完整路径调用
./case.sh PATH/DIRECTORYNAME:在指定路径下创建对应目录
- 无参数调用
内容的提问来源于stack exchange,提问作者TheMathAI
相关产品推荐
相关产品推荐

