shell命令之declare和typeset
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
例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 即可
温馨提示:如无特殊说明,本站文章均为作者原创,转载时请注明出处及相应链接!