if [ "$file" != *.gds ] && [ "$file" != *.cmd ]; then为什么会报错
时间: 2024-04-27 17:21:39 浏览: 33
该语句不会报错,但是可能会无法实现预期的功能。该语句主要判断变量"$file"的值是否不是以".gds"或".cmd"结尾,如果是,则执行语句块中的命令。但是,该语句中的通配符可能会导致语法错误。正确的写法应该是:
if [ "${file##*.}" != "gds" ] && [ "${file##*.}" != "cmd" ]; then
其中"${file##*.}"表示取变量"$file"的值中"."后面的部分,即文件后缀名。
相关问题
if [ "$file" != "*.gds" ] && [ "$file" != "*.cmd" ]; then里面的通配符怎么使用不了
在if条件句中,单引号和双引号会对通配符进行转义,因此通配符会被当作普通字符处理,不会进行模式匹配。如果要使用通配符进行模式匹配,可以不使用引号,或者使用反斜杠对通配符进行转义。例如,可以使用以下方式:
```
if [ $file != *.gds ] && [ $file != *.cmd ]; then
echo "不是gds或cmd文件"
else
echo "是gds或cmd文件"
fi
```
或者使用反斜杠对通配符进行转义:
```
if [ $file != \*.gds ] && [ $file != \*.cmd ]; then
echo "不是gds或cmd文件"
else
echo "是gds或cmd文件"
fi
```
注意,在使用反斜杠进行转义时,星号前面需要加上反斜杠,否则会被当作通配符。
写一个shell脚本,使用if条件句,删除路径下除了以.gds结尾的所有文件和文件夹
好的,以下是使用if条件句删除路径下除了以.gds结尾的所有文件和文件夹的shell脚本:
```
#!/bin/bash
cd /path/to/your/directory
for item in *
do
if [[ $item != *.gds ]]; then
rm -rf $item
fi
done
```
请将`/path/to/your/directory`替换为你想要删除文件和文件夹的目录路径。运行该脚本后,它将会删除该目录下除了以`.gds`结尾的所有文件和文件夹。