在C中,我可以在像这样的函数中定义一个静态变量
int func() {
static int var=0
.....
}
有没有与shell bash linux相同的内容?
是否可以将bash shell函数的局部变量定义为static?
答案 0 :(得分:4)
使用bash
你无法真正得到它(我想你想要在你的shell的几个实例之间共享一些变量......)。但是,如果切换到fish shell(使用chsh
更改登录shell),则会得到所谓的通用变量,这些变量符合要求。另请参阅this answer相关问题。
顺便说一句,你应该阅读advanced bash scripting guide并考虑使用bash
函数(而不是脚本)。
如果您只想在相同的 shell进程内的多个shell函数之间共享变量,那么就不要将它local
声明为函数!
答案 1 :(得分:0)
你打算实际实现什么目标?如果它类似于可以在shell脚本执行之间存储值的变量,则可以使用export命令导出变量。这将使其成为全局可访问的环境变量。
与静态的情况一样,除了代码之外,您必须确保没有其他人在更新它。
答案 2 :(得分:0)
如果要在正在执行的多个脚本中使用变量,则必须将其导出到shell中,或者必须将其导出。
. myscript
其中myscript
定义了一些后来在shell中存在的变量。
答案 3 :(得分:0)
在bash中使用静态变量的唯一原因是保护它免受“编码错误”的影响,如果这成为一个问题,你就不会在每一步中测试你应该。
只需使用预定义的全局变量,并保留脚本的两个副本,即:TestScript和Script。当您测试了对TestScript的更改时,请将更改复制并粘贴到脚本中。
您还应该尽可能在VM中进行所有测试。
我已经完成了这个,我现在有一个脚本可以定制一个准系统Ubuntu 16.04 LTS服务器,包括客户端新主机名,fqdn,root和webmaster的电子邮件转发,以及安装和配置ownCloud, MariaDB 10,PHP 7,Apache 2,Webmin,mod_security,mod_evasive,tripwire,rkhunter,chkrootkit,PSAD,ClamAV,Logwatch,设置防火墙和文件权限,设置日志文件轮换,重置root密码,生成要调用的Expect脚本苍蝇,截断日志并删除生成的脚本文件,然后重新启动服务器以供使用。
我将添加其他功能,以便在安装过程中选择Samba和LDAP作为附加功能,并根据需要修改安装。
需要花费大量时间和大量测试。
答案 4 :(得分:0)
如果您希望在 bash 函数中使用静态变量并拥有 bash 脚本的生命周期,您可以在函数之前定义和初始化它,使其成为全局变量,然后在函数中使用它,无需初始化.该值将具有脚本的生命周期。
#!/bin/bash
variable=0
increment()
{
(( variable++ ))
echo $variable
}
while true; do
increment
sleep 1
done
这将输出一个递增的数字。