为什么回声功能不在这里打印?

时间:2018-01-15 18:47:11

标签: shell if-statement echo

在这个shellcript中,我创建了3个函数。 它将需要2个命令行参数。第一个用于操作的类型,第二个用于字符串在其上执行某些操作。 在这里,我在任何函数中的echo命令都没有打印任何东西..

任何帮助都将不胜感激。

clear

lower()
{
echo $2 | tr "[A-Z]" "[a-z]"
}

upper()
{
echo $2 | tr "[a-z]" "[A-Z]"
}

proper()
{
echo $2 | sed 's/.*/\L&/; s/[a-z]*/\u&/g'
}


#echo "Enter The Option and then the string to perform the operation:"
echo $1 $2 '> echo $1 $2 '

if [ $1 = "-l" ]
then
lower $2
elif [ $1 = "-u" ]
then
upper $2
elif [ $1 = "-p" ] 
then 
proper $2
fi

2 个答案:

答案 0 :(得分:2)

在函数外部$1$2等,请参阅程序的命令行参数。在函数内部,它们是函数的参数。将所有echo $2更改为echo $1

样式改进:

  • 默认情况下,始终引用变量扩展。写"$1""$2"而不是裸$1$2。这样,如果这些参数有空格或全局,它们将扩展为一个单词而不是多个单词。

  • 底部的if / elif链可以替换为case块。

    case "$1" in
        -l) lower "$2";;
        -u) upper "$2";;
        -p) proper "$2";;
    esac
    
  • clear放在脚本的顶部是一种恼人的DOS主义。在Linux上,我不希望我运行的脚本清理我的终端,好像他们最了解。要么摆脱clear;或者,如果您想要花哨,请在顶部添加tput smcup,在底部添加tput rmcup以保存和恢复终端。这就是像lessvim这样的程序可以绘制到整个屏幕,然后在退出时恢复原始终端内容。

答案 1 :(得分:1)

在每个功能中,将$2替换为$1

  lower()
  {
    echo $1 | tr "[A-Z]" "[a-z]"  
  }

对于您的脚本以及您的函数,$1表示第一个参数,$2秒。如果你要为你的脚本提供两个参数,但是你的函数有一个参数,那么它应该是,

$ cat test.sh
#!/bin/bash

echo "$1" "$2"

func_echo(){
 echo "func $1"
}
# Call the function
func_echo $2

导致:

$ ./test.sh "first" "second"
first second
func second