-1

我做了这段代码,如果你不插入任何列,而不是打印“请插入列”,我希望打印所有列的最小值、最大值和平均值,就好像你已经在 incial 代码中插入了所有内容一样。

我试着写

if["$col"=""]; then $col=`seq 5 20` 

但它不起作用。请问有什么帮助吗??

谢谢!

#!/bin/bash
for arg; do
    case "$1" in
        -[0-9]*) col+="${1#-}"",";;
        -g) shift
            gene="$1";;
        [a-z]*) file="$1";;


    esac
    shift
done
echo col="$col" gene="$gene" file="$file"


OLDIFS=$IFS
IFS=","; 

echo "$col"

if ["$col" == ""]; 

    then echo "Insert columns please"   
else

    for i in $col; do   

    echo

    echo minim columna "$i"= `grep "$gene" "$file" | tr -s '  ' ' ' |tr -s ',' '.' | cut -d ' ' -f"$i" | sort -n | head -1`
    echo maxim columna "$i"= `grep "$gene" "$file" | tr -s '  ' ' ' |tr -s ',' '.' | cut -d ' ' -f"$i" | sort -n | tail -1`
    echo average columna "$i"= `grep "$gene" "$file" | tr -s '  ' ' ' |tr -s ',' '.' | cut -d ' ' -f"$i" | awk '{sum+=$1} END {print sum/NR}'`

    shift
    done
fi

IFS=$OLDIFS
4

3 回答 3

3

[和周围的空格]是强制性的,所以不是:

if ["$col" == ""]; 

拥有这个:

if [ "$col" = "" ]; 
于 2013-10-22T15:46:05.263 回答
3

尝试:

if [ "$col" = "" ]; then $col=`seq 5 20` 

如果测试语句在开始之后[和结束之前需要空格,则 Bash]

于 2013-10-22T15:47:04.870 回答
0

拥有这个:

 if ["$col" == ""]; 

最新的 GNU 版本的外部“test”命令和他的分支“[”接受“==”操作符。这相当于“=”。

[ ~]$ str="things"
[ ~]$ [ "$str" == "things" ] && echo "YES" || echo "NO"
YES

以及内部 Bash/KSH 指令:

[ ~]$ [[ $str == things ]] && echo "YES" || echo "NO"
YES

(这不是一个外部命令,如果您只使用 GNU Bash 3+ 或 KSH 88+ 会更好)。

此外,确实有必要在符号“[”和“]”的两侧写空格。操作数是外部命令的参数(或使用 [[ 语法时的内部指令)。否则它将被解释为未知的命令外壳。

于 2013-10-22T18:58:18.187 回答