设为首页 收藏本站
查看: 1014|回复: 0

SHELL中的变量和参数

[复制链接]

尚未签到

发表于 2018-8-25 11:56:22 | 显示全部楼层 |阅读模式
  $    变量替换操作符。
  只有在变量被声明,赋值,unset 或exported 或者是在变量代表一个signal 的时候,
  变量才会是以本来的面目出现在脚本里.变量在被赋值的时候,可能需要使用”=”,
  read状态或者是在循环的头部.
  在”"中还是会发生变量替换,这被叫做部分引用,或叫弱引用.而在”中就不会发生变
  量替换,这叫做全引用,也叫强引用.
  注意:$var 与${var}的区别,不加{},在某些上下文将引起错误,为了安全,使用2.
  shell中的一半变量都是全局的  整个脚本中都能用
  Example1:
[cce]  
#!/bin/bash
  

  
a=123
  

  
hello=$a                            # 强烈注意,在赋值的前后一定不要有空格.
  

  
echo hello                          # 没有变量引用,不过是个hello 字符串
  

  
echo $hello                         #输出123
  

  
echo ${hello}                       # 同上
  

  
echo "$hello"                       # 同上
  
echo "${hello}"                     # 同上
  

  
hello="A B      C            D"
  

  
echo $hello                                  # A B C D
  

  
echo "$hello"                              # A B      C            D
  

  
# 引用一个变量将保留其中的空白,当然,如果是变量替换就不会保留了
  

  
echo '$hello'                              # $hello   这就是全引用的效果。
  

  
hello= # 设置为空值
  

  
echo "\$hello (null value) = $hello"
  

  
# 注意设置一个变量为空,与unset 它,不是一回事,虽然看起来一样
  

  
var1=21 var2=22 var3=$V3    # 可以在同一行上设置多个变量.空格分开
  

  
echo "var1=$var1 var2=$var2 var3=$var3"      # var1=21 var2=22 var3=23
  

  
uninitialized_variable=23                   # 赋值
  

  
unset uninitialized_variable              #unset  取消赋值
  

  
echo "$uninitialized_variable"          #输出 空值
  

  
echo "$uninitialized"                                  # 引用未定义变量会报错
  
let "uninitialized += 5"                               # 但是可以用未定义变量做算数运算
  
echo "$uninitialized"                                  # 运算中未定义变量为0
  
[/cce]
  Example2:
[cce]  
#!/bin/bash
  

  
a=123                                 # = 号赋值
  

  
let a=12+2                       #let 也可赋值
  

  
for a in 7 8 9 11              #for 也可以赋值
  do
  
echo -n "$a "
  done
  

  
read a                             #read 赋值
  

  
a=`ls -l`    或    a=$(ls -l)          #这两个都可用于命令替换
  

  
echo $a                         # 别忘了,这么引用的话,ls 的结果中的所有空白部分都没了(包括换行)
  

  
echo "$a"                      # 这么引用就正常了,保留了空白
  
[/cce]
  注意:bash变量是没有类型的,
  Bash 变量都是字符串.
  但是依赖于上下文,Bash 也允许比较操作和算术操作.决定这些的关键因素就是,变量中的值
  是否只有数字.
  例:
[cce]  
#!/bin/bash
  

  
a=123                                  #a整型
  

  
let "a+=1"                           #a整型 124
  

  
b=${a/12/BB}                #b=BB4 字符型
  

  
declare -i b                       # 即使使用declare 命令也不会对此有任何帮助
  

  
let "b += 1"                       # BB4 + 1 =1   字符型在运算中相当于0
  

  
d=${b/BB/23}              #d=234  变为了整型
  
[/cce]
  三种特殊类型的变量:
  local           只有在代码块或函数中见到。局部变量,作用域只在代码块或是函数中。
  environmental        这种变量将改变用户接口和 shell 的行为.
  positional parameters        命令中传进的值。,$0, $1, $2, $3…    其中 $0就是脚本文件的名字,,$1 是第一个参数,$2 为第2 个,
  9
  以后就需要打括号了,如${10},${11},${12}…两个值得注意的变量$*和$@,表示所有的位置参数.
  如脚本test运行要4个参数 执行:  ./test 1 2 3 4 ……这是  test脚本中的$0=test  $1=1   $2=2 ..$#=4(参数个数)  $*=1 2 3 4(所以参数)
  shift              shift 命令重新分配位置参数,其实就是向左移动一个位置.
  $1

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-556358-1-1.html 上篇帖子: shell文件处理工具 下篇帖子: shell生成随机数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表