电子商务网站建设与维护读书心得,网站建设综合实训心得,深圳网站制作电话,盐城做企业网站的价格文章目录一、命令介绍二、命令格式三、命令选项四、命令示例#xff08;一#xff09;声明变量并赋值#xff08;二#xff09;将变量设置为环境变量#xff08;三#xff09;将变量设置为只读#xff0c;不可修改#xff08;四#xff09;将变量声明为整数并进行计算…
文章目录一、命令介绍二、命令格式三、命令选项四、命令示例一声明变量并赋值二将变量设置为环境变量三将变量设置为只读不可修改四将变量声明为整数并进行计算五显示变量的属性和值六显示所有的变量七显示所有的环境变量八声明数组变量九显示所有自定义函数的名称十显示所有自定义函数包括名称和函数体十一显示指定函数的声明定义内容十二声明一个整数型的变量并给变量赋值一、命令介绍
declare 命令是 bash 的一个内建命令它可以用来声明 shell 变量、显示 shell 变量的值以及设置 shell 变量的属性。declare 声明定义的变量仅能在当前 shell 环境中起作用切换 shell 环境后将无效。
declare 的功能与 typeset 命令的功能是相同的不过 typeset 已经被弃用了建议使用 declare 代替。
二、命令格式
declare [-aAfFgilnrtux] [-p] [var[val] ...]注var 是变量名称val 是变量的值
三、命令选项
选项说明-f显示所有自定义函数包括名称和函数体-F显示所有自定义函数名称-g在 Shell 函数内部创建全局变量-p显示指定变量的属性和值当使用此选项时其他的选项将被忽略-a声明数组变量-A声明变量为关联数组支持索引下标为字符串-i声明整数型变量。这样变量后面就可以跟着算术表达式表达式的结果只能是整数。如果表达式求值失败或者不是整数就设置为 0-l给变量赋值时转为小写-u给变量赋值时转为大写-n使变量 var 成为指向一个以其值为名称的变量的引用-r将变量 var 声明为只读变量。只读变量不允许修改也不允许删除。等价于 readonly name-t使变量 var 带有 trace追踪属性-x将变量 var 导出作用与 export 一样将变量 var 设置成环境变量这样在随后的脚本和程序中可以使用。等价于 export name[value]
特别说明
用 代替 - 会关闭指定选项。例如- 可用来指定变量的属性 则是取消变量所设的属性。带有整数属性的变量在赋值时将使用算术估值(见 let 命令)。在函数中使用时declare 使 var 成为本地变量和 local 命令一致。-g 选项抑制此行为。
四、命令示例
一声明变量并赋值
方式一declare varvalue
[roothtlwk0001host ~]# declare sum200300
[roothtlwk0001host ~]# echo $sum
500注shell 自动判断表达式的数据类型若都是整数型则计算结果再赋值给变量所以最后输出结果 500
方式二typeset varvalue 等价于 declare varvalue
方式三varvalue
[roothtlwk0001host ~]# sum200300
[roothtlwk0001host ~]# echo $sum
200300注此处并没有像我们想像中那样会得到结 500而是 200300这是由于它是文字类型的变量属性。
二将变量设置为环境变量
将变量 var 设置成环境变量这样在随后的脚本和程序中可以使用。
方式一
[roothtlwk0001host ~]# declare -x var
[roothtlwk0001host ~]# declare -x varvalue # 将变量 var 设置成环境变量并赋值为 value
方式二
[roothtlwk0001host ~]# typeset -x var方式三
[roothtlwk0001host ~]# export var三将变量设置为只读不可修改
[rootlinux ~]# declare -r sum
[rootlinux ~]# sumapple
-bash: sum: readonly variable
[rootlinux ~]# unset sum
-bash: unset: sum: cannot unset: readonly variable 注声明为只读变量之后不能修改该变量的属性也不能修改变量的值也不能删除该变量所以在声明变量的时候应该慎用避免有去无回。另外你在命令行中敲 readonly你会发现有很多只读变量当然这些变量也是不能修改或删除的。
四将变量声明为整数并进行计算
[rootlinux ~]# declare -i m n ret # 将多个变量声明为整数
[rootlinux ~]# m10
[rootlinux ~]# n30
[rootlinux ~]# ret$m$n
[rootlinux ~]# echo $ret
40五显示变量的属性和值
其实就是现实变量的声明定义语句如下所示
[c.biancheng.net]$ declare -r n10
[c.biancheng.net]$ declare -p n
declare -r n10六显示所有的变量
[roothtlwk0001host ~]# declare -p
declare -- BASH/bin/bash
declare -r BASHOPTScheckwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
declare -ir BASHPID
declare -- BASHRCSOURCEDY
declare -A BASH_ALIASES()
declare -a BASH_ARGC()
declare -a BASH_ARGV()
declare -A BASH_CMDS()七显示所有的环境变量
[roothtlwk0001host ~]# declare -x
declare -x DBUS_SESSION_BUS_ADDRESSunix:path/run/user/0/bus
declare -x HISTCONTROLignoredups
declare -x HISTSIZE1000
declare -x HOME/root
declare -x HOSTNAMEhtlwk0001host
declare -x JAVA_HOME/usr/java/latest八声明数组变量
将变量 var 声明为数组变量。但这没有必要。所有变量都不必显式定义就可以用作数组。事实上在某种意义上似乎所有变量都是数组而且赋值给没有下标的变量与赋值给var[0]相同。
[rootjfht ~]#declare -a names # 声明一个数组变量叫names
[rootjfht ~]#namesJack # 给数组赋值没有具体指定下标默认赋值给下标为0的位置即等价于names[0]Jack
[rootjfht ~]#echo ${names[0]} # 输出数组names下标为0的元素的值
Jack
[rootjfht ~]#names[1]Bone # 给数组names下标为1的位置赋值Bone
[rootjfht ~]#echo ${names[1]}
Bone
[rootjfht ~]#echo ${names} # 没有指定下标输出第一个元素的值。直接引用names相当于引用names[0]
Jack
[rootjfht ~]#echo ${names[*]} # *代表数组所有的元素
Jack Bone
[rootjfht ~]#echo ${#names} # 输出数组第一个元素的长度
4
[rootjfht ~]#echo ${#names[*]} # 输出数组的长度即数组的元素个数
2
[rootjfht ~]#echo ${names[]} # 与*类似
Jack Bone
[rootjfht ~]#echo ${#names[]} # 输出数组的长度即数组的元素个数
2
[rootjfht ~]#declare -p names # 查看变量的属性和值即变量names的声明定义内容
declare -a names([0]Jack [1]Bone)
[rootjfht ~]# 九显示所有自定义函数的名称
[roothtlwk0001host ~]# declare -F
declare -f __expand_tilde_by_ref
declare -f __get_cword_at_cursor_by_ref
declare -f __load_completion
declare -f __ltrim_colon_completions
declare -f __parse_options
declare -f __parse_vdo_options
...十显示所有自定义函数包括名称和函数体
[roothtlwk0001host ~]# declare -f
__expand_tilde_by_ref ()
{ if [[ ${!1} \~* ]]; thenif [[ ${!1} */* ]]; theneval $1${!1/%\/*}/${!1#*/};elseeval $1${!1};fi;fi
}
__get_cword_at_cursor_by_ref ()
...十一显示指定函数的声明定义内容
[roothtlwk0001host ~]# declare -f __expand_tilde_by_ref
__expand_tilde_by_ref ()
{ if [[ ${!1} \~* ]]; thenif [[ ${!1} */* ]]; theneval $1${!1/%\/*}/${!1#*/};elseeval $1${!1};fi;fi
}
[roothtlwk0001host ~]# 十二声明一个整数型的变量并给变量赋值
[roothtlwk0001host ~]# declare -i var
[roothtlwk0001host ~]# var6/3
[roothtlwk0001host ~]# declare -p var
declare -i var2
[roothtlwk0001host ~]# echo $var
2给整数型的变量赋予非整数型的值结果变成0如下所示
[roothtlwk0001host ~]# varerror
[roothtlwk0001host ~]# echo $var
0
[roothtlwk0001host ~]# 如果变量被声明成整数把一个小数浮点数赋值给它时也是不行的。因为bash并不内置对浮点数的支持如下所示
[roothtlwk0001host ~]# var3.14
-bash: 3.14: syntax error: invalid arithmetic operator (error token is .14)取消变量 var 的整数类型属性如下命令
[roothtlwk0001host ~]# declare i var
[roothtlwk0001host ~]# var6/3
[roothtlwk0001host ~]# echo $var
6/3因为变量 var 不是整型变量所以不会自动对除法的表达式求值。可以采用下面两个方式
[roothtlwk0001host ~]# x$[6/3]
[roothtlwk0001host ~]# echo $x
2
[roothtlwk0001host ~]# x$((6/3))
[roothtlwk0001host ~]# echo $x
2