Bash脚本运行报syntax error near unexpected token `if'错误求解
报错原因
你遇到的语法报错由两个写法错误导致:
for循环结构缺失关键字:Bash中for循环的标准语法为for 变量 in 取值列表; do 执行逻辑; done,你在for x in $janeSearch;之后直接写if判断,缺少了必须的do关键字,是触发本次报错的直接原因。- 条件判断行符号错误:
if test -e ~/$x: then一行中,用于分隔判断条件和then的符号被误写为冒号,正确应该使用半角分号,或者直接把then换到下一行,不需要加分隔符。 - 补充:你原来的代码还缺少
for循环必须的结束标记done,也会在修复前两个问题后触发新的语法错误。
修正后可运行的代码
#!/bin/bash > oldFiles.txt janeSearch=$( grep " jane " ../data/list.txt | cut -d ' ' -f 1,3 ) for x in $janeSearch; do if test -e ~/$x; then echo $x >> oldFiles.txt fi done
补充优化建议
如果你的文件名可能包含空格,直接遍历$janeSearch会出现拆分错误,可以用数组存储grep结果,写法更稳妥:
#!/bin/bash > oldFiles.txt # 将结果按行存入数组 mapfile -t janeArr < <(grep " jane " ../data/list.txt | cut -d ' ' -f 1,3) for x in "${janeArr[@]}"; do if test -e ~/"$x"; then echo "$x" >> oldFiles.txt fi done
内容的提问来源于stack exchange,提问作者hmood
相关产品推荐
相关产品推荐

