我学习BASH脚本,我遇到了问题。我写了一个生成器,检查是否有与给定名称相同的脚本,如果没有,它会生成一个,使其可执行并给它正确的shebang。但它不起作用。我希望它在已经有一个具有该名称的脚本时退出。你能告诉我我做错了吗?
#!/bin/bash
clear
echo "Name the script"
read name
echo "What shell? (bash/sh)"
read type
if [ -e ./$name ]
then
echo "You already have that script"
read
exit
else
touch $name
chmod 755 $name
fi
case $type in
"bash") echo '#!/bin/bash' > $name ;;
"sh") echo '#!/bin/bash' > $name ;;
*) echo "I don't know what do you want" ;;
esac
vim $name
答案 0 :(得分:0)
还有一个额外的read
阻碍了你:
if [[ -e ./$name ]]
then
echo "'./$name' already exists" # <<<< always report the name
# read <<<< This is the line which is causing problems
exit 1 # <<<< indicate there was an error
else
touch "$name"
chmod 755 "$name"
fi
引用文件名,因为它们包含嵌入的空格(如果您使用[[ ]]
,则不需要围绕变量。
另请注意,#!
的{{1}}行有误(您正在使用sh
)
编辑:
如果您的系统上有bash
,那么使用/etc/shells
菜单是一个很好的练习。试试这个:
select
您也可以考虑使用#!/bin/bash
read -p "Name the script: " name
if [[ -e ./$name ]]
then
echo "'./$name' already exists" # <<<< always report the name
# read <<<< This is the line which is causing problems
exit 1 # <<<< indicate there was an error
else
touch "$name"
chmod 755 "$name"
fi
declare -a shells
i=0
while read shell
do
if [[ $shell != \#* && $shell != "" ]]
then
shells[i++]="$shell"
fi
done < /etc/shells
PS3='Please select the shell: '
select type in "${shells[@]}" QUIT
do
echo "You selected $type"
if [[ $type == QUIT ]]
then
exit 2
fi
break
done
echo "#!$type" > "$name"
vim $name
而不是硬编码$EDITOR
。