基本语法语义
- $在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中所有变量
变量定义规则:
- 变量名称可以由字母,数字和下划线组成,但是不能由数字开头,环境变量名建议大写.
- 符号两侧不能有空格
- 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算.
- 变量的值如果有空格,需要使用双引号或者单引号括起来.
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 ~#
用于判断的特殊函数
Comments | NOTHING