当前位置: 首页 > 知识库问答 >
问题:

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

毕嘉
2023-03-14

拉斯宾(杰西)-root@RaspberryPi-腻子

在我输入的终端中

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每小时启动一次这个脚本

苏。一定有什么地方出错了。因为他将变量$finalanswer解读为nothing。

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

我该如何解决这个问题?

共有2个答案

隆安然
2023-03-14

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

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

您可以对cron条目执行相同的操作:

*/10 * * * * VARIABLE=hunter <command>
左丘峰
2023-03-14

Shell变量不会被子进程继承。如果您希望一个变量被继承,它必须是一个环境变量。您可以使用export命令创建环境变量。

export finalanswer=0

finalanswer=0
export finalanswer

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

finalanswer=0 /path/to/script

请注意,cron作业无法访问您在shell中分配的变量。变量只能导出到从shell派生的进程,并且cron运行的进程与您的shell进程无关。如果您想设置一个变量用于cron作业,您可以将分配放入crontab文件本身。

 类似资料:
  • 我想在我的shell脚本中使用mysql语法和变量,我用错了什么? 我正在尝试将其作为./test.sh运行

  • 问题内容: 我正在尝试为变量分配数组长度。 它说找不到len命令。为什么? 问题答案: 变量名和赋值运算符之间不能有空格。如果这样做,会将变量名称视为命令。 尝试:

  • 本文向大家介绍Shell脚本定义变量和重新赋值,包括了Shell脚本定义变量和重新赋值的使用技巧和注意事项,需要的朋友参考一下 Shell支持自定义变量。 定义变量 定义变量时,变量名不加美元符号($),如: 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则: •首个字符必须为字母(a-z,A-Z)。 •中间不能有空格,可以使用下划线(_)。

  • 本文向大家介绍处理Shell脚本中带有空格的变量(bash脚本),包括了处理Shell脚本中带有空格的变量(bash脚本)的使用技巧和注意事项,需要的朋友参考一下 本篇主要介绍bash脚本中对于含空格文件处理方式。 在批量处理音频文件时候使用下面的脚本发现含有空格的文件名并不能被处理; 通过set -x将执行信息打印出来,发现可以执行到,但是执行过程提示找不到对应的文件名,mv对应的source文

  • 终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要。下面笔者就带你正式进入shell脚本的世界吧。 到现在为止,你明白什么是shell脚本吗?如果明白最好了,不明白也没有关系,相信随着学习的深入你就会越来越了解到底什么是shell脚本。首先它是一个脚本,并不能作为正式的编程语言。因为是跑在linux的s

  • bash csh ksh zsh 基本语法 定义和使用变量 #!/bin/sh a=" hello world" echo $a echo 'a is xiaxaiwen${a}' if else if ....; then   .... elif ....; then   .... else   .... fi [] 条件测试 [] 中前后一定要加空格 sh