内部变量简介

shell 中有很多[color=red]内建[/color]变量,它们会影响到 shell 脚本的行为,所以也有必要知道。
* BASH:表示 Bash 的二进制程序文件的路径。
* BASH_ENV:它会指向一个 Bash 的启动文件,该文件会在一个脚本被调用时读取。
* BASH_SUBSHELL:用来提示子 shell 的层次。
* BASH_VERSINFO[n]:它包含了安装的 Bash 的版本信息,是一个含有 6 个元素的数组,分别代表:主版本号、次版本号、补丁次数、编译版本、发行状态和结构体系。
* BASH_VERSION:Bash 的版本号,它与 $BASH_VERSINFO 很像,只是没那么详细。检查该变量对于判断系统上到底运行哪个 shell 来说是一种很好的办法,因为变量 $SHELL 有时候不能给出正确的答案。
* DIRSTACK:目录栈中最顶端的值。它与 dirs 命令类似,不过 dirs 命令会显示目录栈的整个内容。
* EDITOR:脚本默认的编辑器。
* EUID:表示“有效”的用户 ID。
* FUNCNAME:当前函数的名字。只在函数中有效,超出函数作用域将变为 null。
* GLOBIGNORE:在进行文件通配查找时要从结果集中去掉的文件模式组成的列表。
* GROUPS:当前用户所属的组 ID 列表。与 /etc/passwd 中的一样。
* HOME:用户的 home 目录,一般是 /home/<username>。
* HOSTNAME:系统主机名。
* HOSTTYPE:主机类型。如同 $MACHTYPE,用来识别系统硬件。
* IFS:内部域分隔符,用来决定 Bash 在解释字符串时如何识别域,或者单词边界。默认为空白符(空格、制表符和换行符)。示例如下:

$ v="aa:bb:cc"
$ IFS=":"
$ for a in $v; do echo "[$a]"; done
[aa]
[bb]
[cc]
$ IFS=
$ for a in $v; do echo "[$a]"; done
[aa:bb:cc]
$
$ bash -c 'set w x y-z; IFS=":"; echo "$* -> [$1] [$2] [$3]"'
w:x:y-z -> [w] [x] [y-z]

* IGNOREEOF:忽略 EOF。告诉 shell 在 log out 之前要忽略多少次文件结束符(Ctrl+D)。
* LC_COLLATE:用来控制文件名扩展和模式匹配的展开顺序,常在 ~/.bashrc 或 /etc/profile 中设置。文件名匹配在 2.05 版本后的 Bash 中不再区分中括号结构中的字符范围里字符的大小写,比如“ls [A-Z]*”既能匹配 ABc 也能匹配 abc。要使中括号里的字符区分大小写,可以设置该变量为 C。在 /etc/profile 和 ~/.bashrc 中设置“export LC_COLLATE=C”将永久生效。
* LC_CTYPE:控制通配和模式匹配中的字符串解释。
* LINENO:记录自身在脚本中所在的行号。一般用于调试目的。
* MACHTYPE:机器类型。标识系统的硬件。
* OLDPWD:之前的工作目录。
* OSTYPE:操作系统类型。
* PATH:可执行文件的搜索路径。
* PIPESTATUS:是一个数组变量,依次保存了运行在前台管道中的相应命令的退出状态码,即 ${PIPESTATUS[0]} 保存管道中第一个命令的退出状态码,${PIPESTATUS[1]} 保存第二个命令的退出状态码,依此类推。要注意的是,最后一个运行的管道的退出状态码和最后一个命令运行的退出状态码并不一定相同。
* PPID:父进程的进程 ID。
* PROMPT_COMMAND:保存了在主提示符 $PS1 显示之前需要执行的命令。
* PS1:主提示符。可以在命令行中见到。
* PS2:第二提示符。当需要额外输入的时候就会看到,默认显示“>”。
* PS3:第三提示符。在一个 select 循环中显示。
* PS4:第四提示符。当使用“-x”选项来调用脚本时,该提示符就会出现在每行输出的开头。默认显示“+”。
* PWD:当前的工作目录。作用同内建命令“pwd”。
* RANDOM:这实际上是 Bash 的内部函数,它会产生 0 ~ 32767 之间的伪随机数。
* REPLY:当 read 命令没有指定接收输入的变量时,该变量就会作为默认变量提供给 read。也可以用于 select 菜单,但是只提供所选择变量的编号,而不是变量本身的值。
* SECONDS:脚本已经运行的秒数。
* SHELLOPTS:shell 中已经激活的选项的列表。这是一个只读变量。
* SHLVL:shell 级别,就是 Bash 被嵌套的深度。如果是在命令行中,则其值为 1。在脚本中则为 2。
* TMOUT:表示在经过 TMOUT 秒后还没有输入,shell 提示符将会超时。类似于 read 命令的“-t”参数。
* UID:当前的用户 ID,是一个只读变量,和内建的 id 命令很像。
* $0, $1, $2 等:位置参数。从命令行传递到脚本,或者传递给函数,或者 set 给变量(见上面的 $IFS 变量示例)。
* $#:命令行参数或者位置参数的个数。
* "$*":把所有的位置参数都看作为一个单词。使用时一般需要被引用起来,否则会把参数看成单独的单词。
* "$@":同“$*”,不过把参数列表中的每个参数都看作单独的单词,可迭代读取其中的每个参数。使用时一般也需要被引用起来。另外,shift 命令执行后,“$@”将会保存剩余的位置参数,但是没有之前的“$1”,因为被 shift 丢弃了。“$@”和“$*”中的参数只有在被双引号引用起来的时候才会不同。“$IFS”变量的值也会影响这两个变量的行为,尤其是设置 IFS 为空的时候(IFS=""),不过这种行为可能依赖于所使用的 shell。
* $-:使用 set 命令设置的脚本标记。
* $!:运行在后台的最后一个作业的进程 ID。
* $_:保存之前执行的命令的最后一个参数或命令(没有参数的话)的值。
* $?:命令、函数,或脚本本身的退出状态码。
* $$:脚本自身的进程 ID。经常用来构造“唯一的”临时文件名,因为比直接调用 mktemp 命令简单些。
<think>我们被要求使用中文回答问题,并且最后必须提出3-5个相关问题,以“§§相关问题§§”开头,然后列出问题。 用户的问题是:“vbs 设定内部变量” 我们需要解释在WinCC环境中如何使用VBScript设定内部变量(即WinCC的内部变量,不是PLC变量)。 在WinCC中,内部变量(Internal Tags)是在WinCC项目内部定义的变量,不直接与外部设备(如PLC)通信。我们可以通过VBScript来读写这些变量。 步骤: 1. 在WinCC变量管理器中创建内部变量(例如,命名为“InternalTag1”,数据类型为整数)。 2. 在WinCC的图形编辑器(画面)中,可以使用按钮等控件的VBS动作来修改变量值。 示例脚本(VBS): 假设我们要将内部变量“InternalTag1”的值设置为100。 注意:在WinCC V7中,我们使用以下方法: SetTagValue "InternalTag1", 100 但是,在VBScript中,我们通常使用HMIRuntime对象来访问变量。然而,WinCC提供了一些内置函数,如SetTagValue。 然而,在WinCC的VBS动作中,可以直接使用SetTagValue函数,因为WinCC已经将这些函数预定义在脚本环境中。 因此,一个简单的VBS脚本如下: ```vbs ' 设置内部变量 SetTagValue "InternalTag1", 100 ``` 另外,也可以使用HMIRuntime对象: ```vbs Dim objTag Set objTag = HMIRuntime.Tags("InternalTag1") objTag.Write 100 ``` 但是,注意在WinCC的VBS动作中,我们通常使用第一种方法,因为更简洁。 另外,如果需要在全局脚本中使用,方法相同。 重要:在WinCC中,内部变量和外部变量在脚本中设置的方式是一样的,都是通过变量名。 现在,按照要求,我们需要在回答后提出3-5个相关问题。 注意:问题必须基于用户的问题和我们的回答。 可能的问题: 1. 如何在WinCC中创建内部变量? 2. 除了VBS,还可以使用哪些脚本语言设置WinCC内部变量? 3. 如何通过VBS读取WinCC内部变量的值? 4. 在WinCC中,内部变量和过程变量(外部变量)在脚本操作上有何区别? 5. 使用VBS设置内部变量时,如何检查设置是否成功? 我们选择3-5个,这里选择4个。 回答格式: 首先回答用户的问题,然后以“§§相关问题§§”开头,接着列出问题(1. ... 2. ... 3. ... 4. ...) 注意:禁止换行分散,所以相关问题要连续输出。</think>在 WinCC 中使用 VBScript 设定内部变量的方法如下: 1. **基本语法** ```vbs HMIRuntime.Tags("变量名").Write 值 ``` 2. **完整示例** ```vbs ' 设置布尔型变量 HMIRuntime.Tags("Motor_Status").Write True ' 设置整型变量 HMIRuntime.Tags("Counter").Write 15 ' 设置浮点型变量 HMIRuntime.Tags("Temperature").Write 23.6 ' 设置字符串变量 HMIRuntime.Tags("Message").Write "设备启动" ``` 3. **错误处理** ```vbs On Error Resume Next HMIRuntime.Tags("Pressure").Write 100 If Err.Number <> 0 Then MsgBox "变量写入失败:" & Err.Description End If ``` 4. **动态变量名** ```vbs Dim varName varName = "Sensor_" & CStr(GetID()) ' 动态生成变量名 HMIRuntime.Tags(varName).Write 45.2 ``` 5. **注意事项** - 变量必须先在 WinCC 变量管理中创建 - 数据类型需匹配(整数/浮点数/字符串等) - 脚本需在 WinCC 脚本环境(如按钮事件、全局脚本)中执行 - 使用 `Read` 方法读取变量值:`value = HMIRuntime.Tags("变量名").Read`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值