如果elif else有多个选项错误

时间:2017-03-14 18:21:57

标签: bash if-statement

我有一个.ini文件,其中一个选项是: [LDdecay] ;确定是否检查SN衰变的LD衰减 ;" 0"是假的(不)," 1"仅适用于GBS," 2"仅适用于SoySNP50K," 3"仅适用于合并," 4"适用于所有人(GBS,SoySNP50K和Merge) 衰变= 1

对于第69,72,80,88和96行(基本上是if或elif语句的任何地方),我不断收到以下错误: [::期望整数表达式

我清楚地忽略了一些事情,因为我曾与elif和其他人成功合作,所以任何能够抓住故障的人都会受到很大的影响。 感谢

#!/bin/bash


#################################################
#                                               #
#    A base directory must be created and       #
#    the config file must be placed in there    #
#                                               #
#################################################



#check if config file was supplied
if [ $# -ne 1 ]; then #if number of argument is different than 1
  echo -e "Usage: run_pipeline_cfg.sh <configuration file>" #print     error message
  exit 1 #stop script execution
fi

#Parse the info from the ini file
ini=$(readlink -m "$1")
source <(grep="$ini" | \
sed -e "s/[[:space:]]*\=[[:space:]]*/=/g" \
-e "s/;.*$//" \
-e "s/[[:space:]]*$//" \
-e "s/^[[:space:]]*//" \
-e "s/^\(.*\)=\([^\"']*\)$/\1=\"\2\"/")




#ini="/home/directory/Initiator.ini" #debug

#Retrieve the base directory path
baseDir=$(dirname "$ini")


#Create required directory structure
logs="$baseDir/logs"
LDdecay="$baseDir/LDdecay"
imputed="$baseDir/imputed"


#dont create if already exists
[[ -d "$logs" ]] || mkdir "$logs"
[[ -d "$LDdecay" ]] || mkdir "$LDdecay"
[[ -d "$imputed" ]] || mkdir "$imputed"




#find imputed vcf files
if [ -e $imputed ] ; then
  echo -e "Folder with imputed vcf files exists. Determining if calculating LD decay"
else
  echo -e "Folder with imputed vcf files does not exist. Cannot calculate LD decay."
  exit 1
fi


#######################################################
#                                                     #
#      Create LD decay files for LD decay plots       #
#                                                     #
#######################################################

#determine on which files to perform LD decay calculations
#"0" is false (no), "1" is true for GBS only, "2" is true for Microarray only, "3" is true for Integrated only, "4" is true for all (GBS, Microarray and Integrated)

if [ "$decay" -eq 0 ]; then
  printf "LD decay rates not calculated" | tee -a $logs/log.txt;

elif [ "$decay" -eq 1 ]; then
  #perform LD decay calculation for GBS only
  zcat $imputed/GBS_MAF0.01.vcf.gz > $LDdecay/GBS_MAF0.01.vcf
  plink --vcf $LDdecay/GBS_MAF0.01.vcf --r2 --ld-window 10000000 --ld-window-kb 10000 --ld-window-r2 0 --output $LDdecay/GBS_LD_decay
  rm $LDdecay/GBS_MAF0.01.vcf

  printf "LD decay for GBS dataset completed" | tee -a $logs/log.txt

elif [ "$decay" -eq 2 ]; then
    #perform LD decay calculation for microarray only
  zcat $imputed/microarray_MAF0.01.vcf.gz > $LDdecay/microarray_MAF0.01.vcf
  plink --vcf $LDdecay/microarray_MAF0.01.vcf --r2 --ld-window 10000000 --ld-window-kb 10000 --ld-window-r2 0 --output $LDdecay/microarray_LD_decay
  rm $LDdecay/microarray_MAF0.01.vcf

  printf "LD decay for microarray dataset completed" | tee -a $logs/log.txt

elif [ "$decay" -eq 3 ]; then
  #perform LD decay for Merged dataset only
  zcat $imputed/Integrated_MAF0.01_sorted.vcf.gz > $LDdecay/Integrated_MAF0.01.vcf
  plink --vcf $LDdecay/Integrated_MAF0.01.vcf --r2 --ld-window 10000000 --ld-window-kb 10000 --ld-window-r2 0 --output $LDdecay/Integrated_LD_decay
  rm $LDdecay/Integrated_MAF0.01.vcf

  printf "LD decay calculation for Integrated dataset complete" | tee -a $logs/log.txt

elif [ "$decay" -eq 4 ]; then
  #perform LD decay for Merged, GBS and SoySNP50K datasets
  zcat $imputed/Integrated_MAF0.01_sorted.vcf.gz > $LDdecay/Integrated_MAF0.01.vcf
  plink --vcf $LDdecay/Integrated_MAF0.01.vcf --r2 --ld-window 10000000 --ld-window-kb 10000 --ld-window-r2 0 --output $LDdecay/Integrated_LD_decay
  rm $LDdecay/Integrated_MAF0.01.vcf

  zcat $imputed/microarray_MAF0.01.vcf.gz > $LDdecay/microarray_MAF0.01.vcf
  plink --vcf $LDdecay/microarray_MAF0.01.vcf --r2 --ld-window 10000000 --ld-window-kb 10000 --ld-window-r2 0 --output $LDdecay/microarray_LD_decay
  rm $LDdecay/microarray_MAF0.01.vcf

  zcat $imputed/snp_imputed_GBS_MAF0.01.vcf.gz > $LDdecay/GBS_MAF0.01.vcf
  plink --vcf $LDdecay/GBS_MAF0.01.vcf --r2 --ld-window 10000000 --ld-window-kb 10000 --ld-window-r2 0 --output $LDdecay/GBS_LD_decay
  rm $LDdecay/GBS_MAF0.01.vcf

  printf "LD decay calculation completed for Integrated, GBS and SoySNP50K datasets completed" | tee -a $logs/log.txt

else
  echo "Wrong LD Decay calculation setup"
  exit 1
fi

1 个答案:

答案 0 :(得分:0)

考虑将elsif链更改为case语句。它应该试图使测试具有整数参数,并且它更清晰,更容易扩展:

case $decay in
  0)
    printf "LD decay rates not calculated" | tee -a $logs/log.txt;
    ;;

  1)
    #perform LD decay calculation for GBS only
    zcat $imputed/GBS_MAF0.01.vcf.gz > $LDdecay/GBS_MAF0.01.vcf
    plink --vcf $LDdecay/GBS_MAF0.01.vcf --r2 --ld-window 10000000 --ld-window-kb 10000 --ld-window-r2 0 --output $LDdecay/GBS_LD_decay
    rm $LDdecay/GBS_MAF0.01.vcf

    printf "LD decay for GBS dataset completed" | tee -a $logs/log.txt
    ;;

  2)
    #perform LD decay calculation for microarray only
    zcat $imputed/microarray_MAF0.01.vcf.gz > $LDdecay/microarray_MAF0.01.vcf
    plink --vcf $LDdecay/microarray_MAF0.01.vcf --r2 --ld-window 10000000 --ld-window-kb 10000 --ld-window-r2 0 --output $LDdecay/microarray_LD_decay
    rm $LDdecay/microarray_MAF0.01.vcf

    printf "LD decay for microarray dataset completed" | tee -a $logs/log.txt
    ;;

  3)
    #perform LD decay for Merged dataset only
    zcat $imputed/Integrated_MAF0.01_sorted.vcf.gz > $LDdecay/Integrated_MAF0.01.vcf
    plink --vcf $LDdecay/Integrated_MAF0.01.vcf --r2 --ld-window 10000000 --ld-window-kb 10000 --ld-window-r2 0 --output $LDdecay/Integrated_LD_decay
    rm $LDdecay/Integrated_MAF0.01.vcf

    printf "LD decay calculation for Integrated dataset complete" | tee -a $logs/log.txt
    ;;

  4)
    #perform LD decay for Merged, GBS and SoySNP50K datasets
    zcat $imputed/Integrated_MAF0.01_sorted.vcf.gz > $LDdecay/Integrated_MAF0.01.vcf
    plink --vcf $LDdecay/Integrated_MAF0.01.vcf --r2 --ld-window 10000000 --ld-window-kb 10000 --ld-window-r2 0 --output $LDdecay/Integrated_LD_decay
    rm $LDdecay/Integrated_MAF0.01.vcf

    zcat $imputed/microarray_MAF0.01.vcf.gz > $LDdecay/microarray_MAF0.01.vcf
    plink --vcf $LDdecay/microarray_MAF0.01.vcf --r2 --ld-window 10000000 --ld-window-kb 10000 --ld-window-r2 0 --output $LDdecay/microarray_LD_decay
    rm $LDdecay/microarray_MAF0.01.vcf

    zcat $imputed/snp_imputed_GBS_MAF0.01.vcf.gz > $LDdecay/GBS_MAF0.01.vcf
    plink --vcf $LDdecay/GBS_MAF0.01.vcf --r2 --ld-window 10000000 --ld-window-kb 10000 --ld-window-r2 0 --output $LDdecay/GBS_LD_decay
    rm $LDdecay/GBS_MAF0.01.vcf

    printf "LD decay calculation completed for Integrated, GBS and SoySNP50K datasets completed" | tee -a $logs/log.txt
    ;;

  *)
    echo "Wrong LD Decay calculation setup"
    exit 1
    ;;
esac