Alm*_*lmo 5 shell scripting user-input
我正在尝试编写一个辅助函数以在bash脚本中使用,以获取变量提示字符串并返回用户输入的值。我所坐的东西等待用户输入值而没有首先显示提示,这令人困惑。它还将回声存储在返回值($ foo)中,并且不保持使用pid变量读取该值。
!#/bin/bash
pid=0
promptValue() {
msg="$1"
echo -e "$msg"
read val
pid=$val
}
foo=$(promptValue "type something")
Run Code Online (Sandbox Code Playgroud)
编辑: 对于将来可能要自己使用的任何人,这是完整的(功能性)脚本,该脚本旨在发送电子邮件(在这种情况下,将其发送到我的手机),以便长时间运行时通知我过程完成。我敢肯定必须有更好的方法来做到这一点,但是。:-)(我这样写它们,以便在其他地方的bash函数库中使用。)
#!/bin/bash
promptValue() {
read -p "$1"": " val
echo $val
}
alertme() {
if [ -z "$email" ]; then
email=$(promptValue "Enter email")
fi
if [ -z "$email" ]; then
echo "ERROR: No email set!"
exit 1
fi
if [ -z "$pid" ]; then
pid=$(promptValue "Enter pid")
fi
if [ -z "$pid" ]; then
echo "ERROR: No pid set!"
exit 1
fi
ps -ef | grep $pid | grep -v grep > /dev/null 2>&1
while [ $? eq 0 ]; do
sleep 10
ps -ef | grep $pid | grep -v grep > /dev/null 2>&1
done
echo "Process Complete" | mailx -s "Process Complete" $email
}
alertme
Run Code Online (Sandbox Code Playgroud)
再次感谢大家!
函数的退出值与函数内执行的最后一个命令的值或语句提供的值相同,return n其中n范围为 0-255。如果您希望函数返回字符串或数值,请使用echo。如果您想捕获变量中函数的输出,并且仍然能够在不捕获输出的情况下将输出发送给用户,请使用stderrwhich read -p。
$ demo() {
local num
echo "capture this"
echo "Message to user" >&2
read -p $1 num
echo $(( num * 2 ))
return 42
}
$ result=$(demo "Enter a number: ")
Message to user
Enter a number: 12
$ echo $?
42
$ echo "$result"
capture this
24
$ echo "$num"
[null][newline]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6797 次 |
| 最近记录: |