shell命令之declare和typeset

作者: admin 分类: Linux 发布时间: 2023-04-13 10:26 浏览:1,032 次    

declare 和 typeset 都是 Shell 内置命令,用法完全相同,用来设置变量的属性或查看已定义的 Shell 变量和函数。declare 命令一般在 Bash版本2 以上使用,而 typeset 命令可以在 ksh 脚本中运行。

declare 命令

语法:declare [+/-] [aAfFgilprtux] [变量名=变量值]
  • -f 列出之前由用户在脚本中定义的函数名称和函数体。
  • -F 仅列出自定义函数名称。
  • -g 在 Shell 函数内部创建全局变量
  • -p 显示指定变量的属性和值
  • -a 声明变量为普通数组
  • -A 声明变量为关联数组(支持索引下标为字符串)
  • -i 将变量定义为整数型
  • -r name[=value] 将变量定义为只读(不可修改和删除),等价于 readonly name
  • -x name[=value] 将变量设置为环境变量,等价于 export name[=value]

例1:定义变量为整数

#!/bin/bash
declare -i a b c 
a=1
b=2
c=$a+$b
echo $c
%title插图%num

例2:定义变量为只读

[root@qunniao_server ~]# declare -r n=1
[root@qunniao_server ~]# n=2
bash: n: 只读变量
[root@qunniao_server ~]# echo $n
1

例3:远程主机引用函数

  • 脚本函数
#!/bin/bash

cp_ssl()
{
user=root
passwd="password"
prot=22
dir_ssl=/opt
#ip=$(ip add |grep eth0| awk -F"[ /]+" '/inet/{print $3}')
sshpass_rpm=$(rpm -qa | grep sshpass | wc -l)
if [ $sshpass_rpm == 1 ];then
sshpass -p "$passwd" scp -o StrictHostKeyChecking=no -P $prot  $user@$ip:/opt/ip.log $dir_ssl
else
yum install sshpass -y
sshpass -p "$passwd" scp -o StrictHostKeyChecking=no -P $prot  $user@$ip:/opt/ip.log $dir_ssl
fi
}
  • 管道方式引用
declare -f cp_ssl | user@host "$(cat);cp_ssl"
  • 非管道方式引用
ssh user@host "$(declare -f cp_ssl); cp_ssl"
  • EOF方式引用
ssh -T user@host << EOF
    $(declare -f cp_ssl)
    cp_ssl
EOF
  • 引用所有函数
ssh user@host "$(declare -f); cp_ssl"
  • 注:
    • declare -f cp_ssl 显示cp_ssl的函数定义
    • cat 以文本方式接收函数
    • $() 在当前shell执行时,将函数引用到远程shell中
    • 引用的函数将在shell执行前内联至shell代码中
    • declare 和 typeset 用法完全相同,直接将declare 替换成typeset 即可


温馨提示:如无特殊说明,本站文章均为作者原创,转载时请注明出处及相应链接!

发表评论