基本语法语义

  • $在shell中代表变量的意思,例如echo $HOME(打印HOME变量值)
  • 赋值变量不能空格,例如A = 1 or A= 1是错误的,正确赋值A=1.
  • 撤销变量命令 unset  [variable_name],不用加$
  • 声明静态变量  command:readonly [variable_name],静态变量不能使用unset撤销,,重新启动就行
  • 全局变量设置  command:export [variable_name],提升为全局变量
  • 使用set命令显示Shell中所有变量

 

变量定义规则:

  1. 变量名称可以由字母,数字和下划线组成,但是不能由数字开头,环境变量名建议大写.
  2. 符号两侧不能有空格
  3. 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算.
  4. 变量的值如果有空格,需要使用双引号或者单引号括起来.

 

Shell中的变量分为全局变量(也可以自定义全局变量)和局部变量(也可以自定义局部变量),任意脚本可以识别全局变量能在使用脚本打印出这个变量所含值;局部变量仅限在脚本或者用户之中,不能使用脚本调用,或者只在脚本中赋值变量并调用.

系统变量:
$SHELL,$HOME,$PWD,$USER

 

实际演示:

自定义变量运算

root@wordpress ~# a="1 + 2"  #有空格使用单引号或者双引号来赋值 没有空格就不用双引号a=1+1
root@wordpress ~# echo $a
1 + 2 #打印结果
root@wordpress ~# echo $a | bc  #加上bc进行运算

3 #运算结果

撤销变量

root@wordpress ~# unset a #撤销变量时不用在变量名前加上$字符
root@wordpress ~# echo $a #打印变量验证是否撤销

root@wordpress ~#  #没有输出,证明已撤销

全局变量和局部变量,把局部变量提升为全局变量,让其它shell脚本也能调用

root@wordpress ~# A=haha   #在用户shell下定义一个局部变量
root@wordpress ~# vim test.sh    #创建脚本来打印用户shell下的局部变量
#!/bin/bash

echo $A
~
~
~
"test.sh" 3L, 21C written
root@wordpress ~# bash test.sh    #执行脚本,指定解释器执行脚本不需要执行权限

root@wordpress ~#    (没有输出,脚本无法打印用户的局部变量,想调用怎么办?把局部变量提升为全局变量)
root@wordpress ~# export A  #让变量全局有效,只需要输入变量名就行,不用带$字符
root@wordpress ~# bash test.sh
haha
root@wordpress ~#    (打印出来了)

 

静态变量呢???
静态变量不能取消,只能关机重启取消
在用户shell自定义一个变量,然后设置为静态变量,脚本也一样不能打印,自定义的变量默认为局部变量,一样不能为脚本调用,只能设置全局变量为其他脚本调用.

 

特殊变量:

$n,$#,$*,$@,$?

  • $n(描述:n为数字,$0代表脚本名字,$1-$9代表第一到第九个参数,10以上的参数需要用大括号包含,${10})
  • 这个特殊符号一般接收参数命令
  • 脚本里面有多少个$n的特殊变量,就能输入多少参数,超过特殊变量的不被执行
  • $#(描述:获取所有输入参数个数,常用与循环)
  • $*(描述:这个变量代表命令行中所有的参数,$*把所有参数看成一个整体)
  • $@(描述:这个变量代表命令行中所有的参数,不过$@把每个参数区分对待)
  • $?(描述:最后一次执行返回状态。如果变量值为0,证明上一个命令执行正常,否则证明上个命令未正确执行)

$n实际演示:
脚本内容

#!/bin/bash
echo "$0 $1"

执行脚本

root@wordpress ~# ./test.sh cmd cmd1 cmd2      //cmd1 cmd2的位置没有特殊变量,也就无法将它打印出来,输入参数等于赋值给了特殊变量,然后脚本调用特殊变量识别用户输入参数并执行
./test.sh cmd
root@wordpress ~#

$n特殊变量根据你输入的参数来执行命令,在写脚本的时候有很大用处.

 

$#实际演示:

在脚本下一行添加echo $#

root@wordpress ~# bash test.sh
test.sh
0
root@wordpress ~# bash test.sh test
test.sh test
1
root@wordpress ~# bash test.sh test 12
test.sh test
2
root@wordpress ~# bash test.sh test 12 32
test.sh test
3
root@wordpress ~# bash test.sh test 12 32 43
test.sh test
4
root@wordpress ~# bash test.sh test 12 32 43 54
test.sh test
5      #5个参数
root@wordpress ~#

获取所有输入参数个数,常用与循环

 

$*,$@的实际演示:
在脚本的下一行添加echo $*、echo $@

root@wordpress ~# bash test.sh test cmd   //两个参数
test.sh test
2
test cmd      //$*把参数看为整体
test cmd     //$#把参数区别对待

 

$?的实际演示:

在脚本下一行加入echo $?

root@wordpress ~# bash test.sh test cmd
test.sh test
2
test cmd
test cmd
0    //值为0,正确执行
root@wordpress ~#

用于判断的特殊函数


You got to put the past behind you before you can move on.