shell变量

#读取从键盘的输入  
read website
#-p 参数,允许在 read 命令行中直接指定一个提示
read -p "输入网站名:" website    
#命令用来读取一个字符并赋值给 sex 变量-n是选项,1是-n选项的参数,sex是参数。
read -n 1 sex
Shell 支持以下三种定义变量的方式:
variable=value
variable='value'
variable="value"
variable 是变量名,value 是赋给变量的值。如果 value 不包含任何空白符(例如空格、Tab 缩进等),那么可以不使用引号;
如果 value 包含了空白符,那么就必须使用引号包围起来。
使用单引号和使用双引号也是有区别的: 以单引号
' '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。
  这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景。 以双引号
" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。
  这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义。 我的建议:如果变量的内容是数字,那么可以不加引号;如果真的需要原样输出就加单引号;
其他没有特别要求的字符串等最好都加上双引号,定义变量时加双引号是最常见的使用场景。
echo ${author}
#变量名外面的花括号{ }是可选的,加不加都行,加花括号是为帮助解释器识别变量的边界
#对变量赋值时不能在变量名前加$,只有在使用变量时才能加$。

Shell 也支持将命令的执行结果赋值给变量,常见的有以下两种方式:
variable=`command`
variable=$(command)
第一种方式把命令用反引号` `(位于 Esc 键的下方)包围起来,反引号和单引号非常相似,容易产生混淆,所以不推荐使用这种方式;
第二种方式把命令用$()包围起来,区分更加明显,所以推荐使用这种方式。 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。 使用 unset 命令可以删除变量。语法: unset variable_name 变量被删除后不能再次使用;unset 命令不能删除只读变量。 a
=`ls -al` echo "ouput:" echo "$a" echo 如果被替换的命令的输出内容包括多行(也即有换行符),或者含有多个连续的空白符,那么在输出变量时应该将变量用双引号包围
否则系统会使用默认的空白符来填充,这会导致换行无效,以及连续的空白符被压缩成一个。 $() 支持嵌套 [c.biancheng.net]$ Fir_File_Lines
=$(wc -l $(ls | sed -n '1p')) [c.biancheng.net]$ echo "$Fir_File_Lines" 36 anaconda-ks.cfg
当 $* 和 $@ 不被双引号" "包围时,它们之间没有任何区别,都是将接收到的每个参数看做一份数据,彼此之间以空格来分隔。
但是当它们被双引号" "包含时,就会有区别了:
"$*"会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。
"$@"仍然将每个参数都看作一份数据,彼此之间是独立的。

$? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值。
所谓退出状态,就是上一个命令执行后的返回结果。退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1
declare变量声明

1、变量声明为数值型
declare -i num
num=9 declare
-i num=12 也可以查看变量类型 declare -p num 得到的结果如下 declare -i num="12" 2、声明数组变量 (1)定义数组 declare -a array arr[0]=x arr[1]=y declare -a arr[2]=z (2)查看数组 echo ${arr} ---结果x echo ${arr[2]} ---结果z echo ${arr[8]} ---结果x y z 和普通变量区别是使用大括号,同时使用下标,若没有下标,则默认使用0。 3、声明环境变量 declare -x t=123 export命令调用的也是上面declare -x 的命令 4、声明变量只读属性 declare -r a=123 重新赋值会报错,不能修改,不能删除 5、查看变量属性 declare -p 查看所有变量属性 declare -p 变量名 查看指定变量的属性 综上所述,declare声明变量总结如下: declare [+/-][选项] 变量名 选项: -:给变量舍得类型属性 +:取消变量的类型属性 -a:将变量声明为数组型 -i:将变量声明为整型 -x:将变量声明为环境变量 -r:将变量声明为只读变量 -p:查看变量的被声明的类型


Shell read 命令支持的选项

选项

说明

-a array

把读取的数据赋值给数组 array,从下标 0 开始。

-d delimiter

用字符串 delimiter 指定读取结束的位置,而不是一个换行符(读取到的数据不包括 delimiter)。

-e

在获取用户输入的时候,对功能键进行编码转换,不会直接显式功能键对应的字符。

-n num

读取 num 个字符,而不是整行字符。

-p prompt

显示提示信息,提示内容为 prompt。

-r

原样读取(Raw mode),不把反斜杠字符解释为转义字符。

-s

静默模式(Silent mode),不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这是很有必要的。

-t seconds

设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么 read 将会返回一个非 0 的退出状态,表示读取失败。

-u fd

使用文件描述符 fd 作为输入源,而不是标准输入,类似于重定向。

declare 命令的用法如下所示:

declare [+/-] [aAfFgilprtux] [变量名=变量值]

其中,-表示设置属性,+表示取消属性,aAfFgilprtux都是具体的选项

选项

含义

-f [name]

列出之前由用户在脚本中定义的函数名称和函数体。

-F [name]

仅列出自定义函数名称。

-g name

在 Shell 函数内部创建全局变量。

-p [name]

显示指定变量的属性和值。

-a name

声明变量为普通数组。

-A name

声明变量为关联数组(支持索引下标为字符串)。

-i name 

将变量定义为整数型。

-r name[=value] 

将变量定义为只读(不可修改和删除),等价于 readonly name。

-x name[=value]

将变量设置为环境变量,等价于 export name[=value]。




原文地址:https://www.cnblogs.com/ggzhangxiaochao/p/13155792.html