shell脚本 - 如何在不在脚本中定义变量的情况下为shell脚本使用变量

时间:2016-02-23 19:09:43

标签: linux bash shell

Raspbian(Jessy) - root @ Raspberry Pi - Putty

在终端我输入

finalanswer=0

现在我得到了一个包含此代码的脚本

#!/bin/bash
source /lib/lsb/init-functions

echo $finalanswer              #just as a test
if [ ! "$finalanswer" = "0" ]
then
        rm -r mnt/objects/all
        log_warning_msg "All Files has been deleted" || true
        touch its_over.txt
else
        let finalanswer=1
        log_action_msg "Var finalanswer was 0. setting back to 1" || true
fi

每小时都会有一个cronjob启动此脚本

SOOO。某处肯定有错误。 因为他正在阅读变量$ finalanswer。

这意味着在此脚本之外定义的变量不起作用吗?

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

子进程不会继承Shell变量。如果要继承变量,则必须是环境变量。您可以使用SELECT CASE WHEN vanguard = 1 THEN 30 ELSE gameid END AS gameid FROM (... main query ...) GROUP BY CASE WHEN gameid = 1 THEN 30 ELSE gameid END ORDER BY SUM(count) DESC LIMIT 1; 命令创建环境变量。

export

export finalanswer=0

您还可以通过将赋值放在命令的开头,仅在命令持续时间内导出变量:

finalanswer=0
export finalanswer

请注意,您在shell中分配的变量可供finalanswer=0 /path/to/script 个作业使用。变量只能导出到shell的后端进程,而cron运行的进程与shell进程无关。如果要设置变量以在cron作业中使用,可以将赋值放入crontab文件中。

答案 1 :(得分:1)

您可以通过将其定义放在要运行的命令之前为单个命令定义变量:

$ VARIABLE=hunter perl -E 'say $ENV{VARIABLE}'
hunter

你可以为cron条目做同样的事情:

*/10 * * * * VARIABLE=hunter <command>