ab520025520025 发表于 2018-8-25 11:56:22

SHELL中的变量和参数

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

  Example2:
  
#!/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"                      # 这么引用就正常了,保留了空白
  

  注意:bash变量是没有类型的,
  Bash 变量都是字符串.
  但是依赖于上下文,Bash 也允许比较操作和算术操作.决定这些的关键因素就是,变量中的值
  是否只有数字.
  例:
  
#!/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变为了整型
  

  三种特殊类型的变量:
  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]
查看完整版本: SHELL中的变量和参数