linux - 如何在 shell 脚本中编写 elif 命令,如 elseif 或在 fortran 中的 else 命令

标签 linux bash shell if-statement

我在 shell 脚本中使用 elif 命令时遇到问题,就像在 fortran 中一样。

我有 100 家公司的员工名单。我想屏蔽那些员工少于 500 人的公司。我的脚本是

rm -f category_1.txt category_2.txt
var=company
for j in 1..100
do n=$(wc -l < $var_$j.txt)
if [ n -ge 500 ]; then 
echo $var_$j >> category_1.txt
elif       #I know it will not work
echo $var_$j >> category_2.txt
fi
done

我知道,我应该写“elif [ n -lt 500 ]; then”。但我想清楚“elif”是否可以像fortran一样使用?对于 Fortran,我们只写

if (n .ge. 500) then
write (1, *) company(j)
else
write (2,*) company(j)
endif

最佳答案

正确的 BASH 脚本应该是:

rm -f category_1.txt category_2.txt
var=company
for j in 1..100; do 
    n=$(wc -l < $var_$j.txt)
    if [[ $n -ge 500 ]]; then 
      echo "${var}_${j}" >> category_1.txt
    else
      echo "${var}_${j}" >> category_2.txt
    fi
done
  • 与其使用旧样式 [ $n -ge 500 ] 不如使用更新的 [[ $n -ge 500 ]]
  • 无需使用 elif,因为您只需要 else
  • $i_$j 将无法正确解析,因为 _ 也被视为变量名的一部分,您需要使用 ${i}_$(j }

关于linux - 如何在 shell 脚本中编写 elif 命令,如 elseif 或在 fortran 中的 else 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30425716/

相关文章:

linux - 无法启动 NFS 在 fedora25 中,由于单元 proc-fs-nfsd.mount 被屏蔽而出现错误

linux - 使用libuv处理unix fifos的方法有哪些?

linux - 将环境变量设置为较大的值 -> "Argument list too long"

目录上的 Bash For 循环

c - sigprocmask() 问题

php - 适用于 Linux/Ubuntu 的 iPhone 测试仪

bash - 在 init.d 中获取服务名称

linux - 我可以使用变量作为 AWK 的 {print} 的参数吗?

Bash:如何替换 csv 文件中的日期并将分钟四舍五入为 4 个值之一

bash - 由引号和未引号部分组成的字符串中的通配符扩展(通配符)