shell脚本如果条件太多参数

时间:2017-09-10 11:30:31

标签: shell if-statement compare

/ root / mp3 / path包含以下文件。 我想移动文件包含字母"在"到其他文件夹

  2017-02-10-12-11-05-in.talaw
  2017-02-10-12-11-05-out.talaw
  2017-02-10-12-12-05-in.alaw
  2017-02-10-12-12-05-out.alaw


  $FILES=/root/mp3/*
  for f in "$FILES"
  do
   ef=$(ls $f | awk -F"." '{print $1}' | awk -F "-" '{print $NF}')
  #to check in for a file
   if [ $ef = "in" ]
  #if file contian "in" letter then move to other folder )
    then 
    mv /FILES /sotrage 
    fi
  done

如果[$ ef ="在" ] 如果我试着用[" $ ef" =="在" ]我没有得到当前的输出

  i am using if [ $ef = "in" ]  to compare if file contains "in"

然后只有它应该将文件conatians移动到其他文件夹

2 个答案:

答案 0 :(得分:0)

不确定您的竞争要求,因为您的问题仅与条件尝试将条件更改为[ $ef == "in" ][[ $ef == "in" ]]有关因为单个=表示它将作为赋值运算符而不是条件。请试一试,如果这对您有所帮助,请告诉我。

答案 1 :(得分:0)

你真正想做的是mv -t /destination /root/mp3/*-in.*

由于您将模式存储在变量中,您遇到了问题:

$FILES=/root/mp3/*
for f in "$FILES"; do

此时,$f包含文字字符串"/root/mp3/*" - 由于"$FILES"周围的引号

,模式尚未展开

然后,你这样做

  ef=$(ls $f | awk -F"." '{print $1}' | awk -F "-" '{print $NF}')

$f未加引号,因此shell扩展了模式,ls最终看到了所有文件的列表。您正在通过awk几行文字。 $ef将包含换行符。此时请尝试echo "$ef"