bash - 语法错误:单词意外(期待“fi”)
问题描述
我试着做脚本:
#!/bin/bash
cat test.txt
echo "Write del if you want delete or write save if you want save"
read s1
echo "Which symbol"
read s2
if [ $s1 = "del" ]
then
sed -i "/^$s2/d"
cat test.txt
if [ $s1 = "save" ]
then
echo "saved"
else
echo "Error"
fi cat test.txt
我有错误 - 语法错误:单词意外(期待“fi”)请帮助!
解决方案
在块或循环内缩进代码if
可以帮助捕获此类问题。每个人都if
需要一个fi
来结束这个块。缩进你的代码:
#!/bin/bash
cat test.txt
echo "Write del if you want delete or write save if you want save"
read s1
echo "Which symbol"
read s2
if [ $s1 = "del" ]
then
sed -i "/^$s2/d"
cat test.txt
if [ $s1 = "save" ]
then
echo "saved"
else
echo "Error"
fi cat test.txt
您可以看到初始块没有用它自己的fi
. 此外,您还有一个奇怪cat
的球与您的fi
. 那不应该在那里。取而代之的是:
#!/bin/bash
cat test.txt
echo "Write del if you want delete or write save if you want save"
read s1
echo "Which symbol"
read s2
if [ $s1 = "del" ]
then
sed -i "/^$s2/d"
cat test.txt
if [ $s1 = "save" ]
then
echo "saved"
else
echo "Error"
fi
cat test.txt
fi
不能保证它会做你想做的事,但它在语法上是正确的。
我强烈建议将其转储到 shellcheck.net 中,这样它就可以为您指明正确的方向。特别是在您的测试中缺少双引号可能会导致一些奇怪的行为。
根据@Aaron 的评论,您可能正在寻找类似以下内容:
#!/bin/bash
cat test.txt
echo "Write del if you want delete or write save if you want save"
read s1
echo "Which symbol"
read s2
if [ "$s1" = "del" ]; then
sed -i "/^$s2/d" test.txt
elif [ "$s1" = "save" ]; then
echo "saved"
else
echo "Error"
fi
cat test.txt
推荐阅读
- excel - 仅当单元格有值时应用条件格式
- android - Android - 每隔一段时间运行一次代码。工作经理?报警管理器?
- pgi - 避免警告:在 RUNNING_ON_VALGRIND 上使用 PGI 时“忽略”“cc”clobber?
- node.js - 图片上传 MERN 堆栈
- informatica - Informatica 云 (IICS) 未从字段名称以数字 (10CL_xyz) 开头的 SQL 服务器加载字段
- f# - 如何使用正则表达式检查字符串是否为日期 F#
- xero-api - 我一直卡在使用 xero-php-oauth2-app-master 进行授权
- javascript - 将语音频道中的所有人静音,某些角色除外
- r - 从名称在变量中的列中选择行
- leaflet - 地图拖动后保持关注画布层