#!/bin/bash if [[ $0 == *.sh ]]; then echo "这是一个脚本文件" else echo "这不是一个脚本文件" fi 为什么命令行中执行该脚本时,txt文件也是显示脚本文件
时间: 2024-02-18 19:01:16 浏览: 21
该脚本判断当前脚本文件名是否以 `.sh` 结尾来确定当前文件是否为脚本文件。如果你在命令行中执行 `./test.sh`,那么 `$0` 变量会被设置为 `./test.sh`,因此该脚本会判断 `./test.sh` 是否以 `.sh` 结尾。
如果你在同一个目录下存在一个以 `.txt` 结尾的文件,例如 `test.txt`,并且你在命令行中执行 `./test.txt`,那么 `$0` 变量会被设置为 `./test.txt`,同样也会被判断为脚本文件,因为 `*.sh` 通配符可以匹配任何以 `.sh` 结尾的字符串。
如果你想要确保该脚本只判断当前文件是否以 `.sh` 结尾,可以在脚本中添加一些条件来进行限制,例如:
```
#!/bin/bash
if [[ $(basename $0) == *.sh ]]; then
if [[ -f $0 ]]; then
echo "当前文件是一个脚本文件"
else
echo "当前文件不是一个脚本文件"
fi
else
echo "当前文件不是一个脚本文件"
fi
```
其中,`basename $0` 可以获取当前文件名(不包括路径),`-f` 参数可以判断当前文件是否存在。这样,就可以避免误判其他以 `.sh` 结尾的字符串。
相关问题
#!/bin/bash if [ $0=="*".sh ] then echo "这是一个脚本文件" else echo "这不是一个脚本文件" fi ~
这是一个简单的 Bash 脚本,但是该脚本有一些错误。正确的语法应该是:
```
#!/bin/bash
if [[ $0 == *.sh ]]; then
echo "这是一个脚本文件"
else
echo "这不是一个脚本文件"
fi
```
在条件判断语句中,应该使用双方括号 `[[` 和 `]]` 来包含条件表达式。此外,等号 `=` 左右两边应该留有空格。最后,`*` 应该放在句点之前,表示任意字符。
#!/bin/bash if [[ $0 == *.sh ]]; then echo "这是一个脚本文件" else echo "这不是一个脚本文件" fi 为什么无法实现
如果你在命令行中直接执行该脚本,可能会出现以下错误:
```
./test.sh: 行 1: #!/bin/bash: No such file or directory
```
这是因为该脚本中的第一行 `#!/bin/bash` 指定了解释器为 `/bin/bash`,而在你的系统上并不存在 `bash` 解释器。
如果你想要使用 `bash` 解释器来运行该脚本,需要确保该解释器已经安装在你的系统中。你可以使用 `which bash` 命令来查看 `bash` 解释器的路径,然后将第一行中的 `/bin/bash` 修改为实际的路径。
另外,如果你使用的是 Windows 系统,请确保你正在使用支持 Bash 脚本的终端,例如 Git Bash 或 Windows Subsystem for Linux。