在这个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
答案 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
以保存和恢复终端。这就是像less
和vim
这样的程序可以绘制到整个屏幕,然后在退出时恢复原始终端内容。
答案 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