如果我有一个完全由函数组成的bash脚本,如何在终端中显示提示等内容?例如,请考虑以下事项:
prompt() {
read -p "This is an example prompt. [Y/n]"
}
main() {
prompt
}
main "$@"
如何在终端中显示该提示信息?当我从main()调用prompt()时,它会将整个prompt()函数设置为黑盒子。我是否必须从prompt()返回一些内容?如果我想在读取提示符()后回显一堆消息怎么办?如何让这些出现在终端?
我想我在这里错过了一个基本的编程概念。
答案 0 :(得分:1)
如果使用该代码运行脚本,则不会执行main。另一种方法是将prompt()作为函数,并将main()的功能移到函数之外。
prompt() {
read -p "This is an example prompt. [Y/n]"
}
prompt
如果您想将main作为一个函数保留,那么您必须获取该文件,然后调用main。
$ source file.sh
$ main
其中file.sh是包含代码的文件,$表示终端提示符。
答案 1 :(得分:1)
回答上一个问题1。是的,'shell'是线性执行的(函数必须在它们被调用之前出现并且只在被调用时执行)并且不会自动调用main。
read
的默认变量是$ REPLY,除非你提供自己的变量,所以:
echo $REPLY
或
read -p "Enter data?" MYVAR; echo $MYVAR
或
read -p "Enter data?" FIRSTVAR RESTOFSENTENCE; echo $FIRSTVAR:$RESTOFSENTENCE
如果你想在“main”之后做更多的事情,你可以按照你希望它们发生在主要内部(假设调用main)或调用main
如果你想让它们只是函数,你可以将它们保存到一个名为myfuncs.sh的文件中,然后从shell源文件中保存并运行一个函数:
. myfuncs.sh && main
答案 2 :(得分:0)
你是如何执行脚本的,以及调用main()的是什么?
Bash脚本与C程序不同,不需要main()函数。 Bash将“记住”它看到的任何函数,但实际上你需要直接从脚本中调用它们。
试试这个:
# Start of script
prompt() {
read -p "This is an example prompt. [Y/n]"
}
prompt
# End of script
bash$ chmod +x script_name
bash$ ./script_name
答案 3 :(得分:0)
您输入提示而不是提示()
更好的是......
function prompt() {
read -p "$* [Y/n]"
}
然后
prompt "This is an example prompt."
答案 4 :(得分:0)
我对你的问题的理解是这样的:
你有一组函数(bash shell脚本),你希望它们将值返回给调用点。
C ++中的示例:
char * prompt() {
std::cout<<"Some message:";
std::cin>>value;
return value;
}
bash(或其他bourne后代shell)脚本中的这种返回值不可能。函数只有一个退出值(类似于命令),例如false
命令的实现:
myfalse() { return 1; }
因此return
仅设置零或非零退出状态。
要使用函数中的值,函数需要将值放入标准输出,并通过命令替换捕获输出。例如:
toupper() {
val="$(echo $1| tr 'a-z' 'A-Z')"
echo $val
}
ucasestr="$(toupper "Hello, World")"
echo $ucasestr
HELLO, WORLD