根据Shell脚本中的参数将输出打印到控制台或文件中

时间:2019-12-02 10:09:38

标签: shell unix

选项1:仅写入文件

LOG_FILE=/tmp/1.txt
su - oracle <<EOF >> $LOG_FILE
whoami
echo "Heloo"
EOF

选项2:在控制台上打印以及写入文件

LOG_FILE=/tmp/1.txt
su - oracle <<EOF | tee -a $LOG_FILE
whoami
echo "Heloo"
EOF

如果我将传递1则尝试参数意味着option1,if 2 option2。如果相同的代码使用if option 1否则option 2重复2次,则其工作是为了最小化传递变量但不起作用的代码。 >

LOG_FILE=/tmp/1.txt
if [ ${1} -eq 1 ] 
then
x=">> $LOG_FILE"
else
x="| tee -a $LOG_FILE"
fi
su - oracle <<EOF $x
whoami
echo "Heloo"
EOF
exit 0

1 个答案:

答案 0 :(得分:0)

您几乎可以使用eval来执行命令

您可以只将 su-oracle 命令创建为变量as并与变量x串联,如图所示

LOG_FILE=/tmp/1.txt
if [ ${1} -eq 1 ] 
then
x=">> $LOG_FILE"
else
x="| tee -a $LOG_FILE"
fi
y="su - oracle <<EOF $x"

然后您可以使用eval执行完整的表达式

   eval $y

休息将保持不变。

完整代码。

LOG_FILE=/tmp/1.txt
if [ ${1} -eq 1 ] 
then
x=">> $LOG_FILE"
else
x="| tee -a $LOG_FILE"
fi
y="su - oracle <<EOF $x"
z="EOF"
eval $y
whoami
echo "Heloo"
eval $z
exit 0

如果上述方法不起作用,您可以尝试为两种情况创建不同的功能

LOG_FILE="p.txt"
logFile()
{
su -oracle <<EOF >> "${LOG_FILE}"
whoami
echo "HEllo"
EOF
}
logPrint()
{
su -oracle <<EOF | tee -a "${LOG_FILE}"
whoami
echo "HEllo"
EOF
}
if [ ${1} -eq 1 ] 
then
    logFile
elif [ ${1} -eq 2 ]
     logPrint
 fi