shell 检测输入文件名是否正确
时间: 2023-11-11 18:04:31 浏览: 34
在shell中检测输入文件名是否正确,可以使用`test`或`[ ]`命令结合`-f`和`-e`选项来实现。具体实现如下:
```bash
#!/bin/bash
read -p "请输入文件名:" filename
if [ ! -e "$filename" ]; then
echo "文件不存在"
elif [ ! -f "$filename" ]; then
echo "不是文件"
else
echo "文件存在且是一个普通文件"
fi
```
解释一下上述代码:
1. `read`命令用于从标准输入中读取用户输入的文件名,并将其保存到变量`filename`中。
2. `if`语句用于判断文件是否存在且是一个普通文件。如果文件不存在,则输出`文件不存在`;如果文件存在但不是一个普通文件(例如目录或设备文件),则输出`不是文件`;否则输出`文件存在且是一个普通文件`。
3. `-e`选项用于检测文件是否存在;`-f`选项用于检测文件是否是一个普通文件。`!`表示逻辑取反,即如果文件不存在或者不是一个普通文件,则执行`then`语句中的命令。
相关问题
shell脚本交互式输入文件名,路径指定
好的,下面是一个示例脚本,它能够让用户交互式地输入文件名和路径,然后进行对应的操作。
```bash
#!/bin/bash
# 获取用户输入的文件名和路径
echo "请输入文件名:"
read file_name
echo "请输入文件路径:"
read file_path
# 进入指定的目录
cd $file_path
# 对文件进行操作,这里只是打印文件内容
cat $file_name
```
在上面的脚本中,我们使用 `read` 命令分别获取用户输入的文件名和路径,然后使用 `cd` 命令进入指定的目录,最后使用 `cat` 命令打印文件内容。注意,如果用户输入的路径不存在,脚本会报错,因此需要在脚本中进行路径存在性的检查。
shell脚本递归文件名
在Shell脚本中,可以使用递归的方式获取文件名。下面是一个示例代码,用于递归获取指定目录下的所有文件名:
```shell
#!/bin/bash
function recursive_files() {
local dir=$1
for file in "$dir"/*; do
if [ -f "$file" ]; then
echo "$file"
elif [ -d "$file" ]; then
recursive_files "$file"
fi
done
}
# 调用递归函数,传入目标目录作为参数
recursive_files "/path/to/directory"
```
上述代码定义了一个名为`recursive_files`的递归函数,该函数接受一个目录作为参数。在函数内部,使用`for`循环遍历目录下的所有文件和子目录。如果是文件,则直接输出文件名;如果是目录,则递归调用`recursive_files`函数。
你可以将`/path/to/directory`替换为你想要获取文件名的目录路径。运行脚本后,它将递归地输出指定目录下的所有文件名。