shell变量
来源:互联网 发布:网络著作权侵权行为 编辑:程序博客网 时间:2024/06/06 07:38
1、用户自定义变量
在编写shell脚本的过程中,用户可以使用自定义的变量来保存数据。这一点类似于c语言中的变量。下面程序段简单示意了shell中变量的定义。
number=1a=2b=3c=$a+$bfilename="test.txt"string="hello world"
因为大部分Linux命令使用的是小写字母,而大多数的shell中的环境变量是使用大写字母表示的。因此,在shell脚本中出现的用户自定义变量最好使用小字母,这样可以很好地区别shell中的环境变量。shell中变量的赋值是由左至右进行的,下面实例演示了在shell脚本中使用多重赋值
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
>首个字符必须为字母(a-z,A-Z)。
>中间不能有空格,可以使用下划线(_)。
>不能使用标点符号。
>不能使用bash里的关键字(可用help命令查看保留关键字)。
#!/bin/shx=2 y=$xecho "x is $x, y is $y"$chmod u+x var.sh./var.shx is 2, y is 2使用unset命令可以删除变量的赋值,使变量的值为空。如果用户需要清除一个变量的值可以这样做,其等效于将这个变量赋值为空。下面实例演示了使用ubset命令清除一个变量的值。
#!/bin/sh#unset.sh 使用unset清除变量的值echo "before clearance"string="hello world"echo $string #输出string变量的原来的值echo "after clearance"unset stringecho $string #输出清除了string变量后的值$chmod u+x unset.sh
$./unset.sh
before clearance
hello world
after clearance
输出string变量的值时其值已经变成了空值,因此打印了一个换行。
2、引用变量
在shell脚本中需要引用一个变量时有3种方法。这3种方法区别不大,通用的一种是需要在引用的变量名之前加上一个"$"字符
1、使用双引号引用变量
"$var"
2、使用大括号引用变量
${var}
3、直接运用变量
$var
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
例:string="hello world"echo "$string"echo ${string}echo $string
hello world
hello world
hello world
3、为表达式求值
expr命令中可以使用数学运算符。例如,数字比较操作,整数运算操作或者逻辑操作等,例:
#!/bin/sh#使用expr命令计算表达式的值#在数学表达式中使用加法操作expr 3 + 2#在数学表达式中使用加法操作expr 3 - 2#在数学表达式中使用求余操作expr 3 % 2#在数学表达式中使用乘法操作是乘法符号必须被转义expr 3 \* 2#在数学表达式中除法操作expr 3 / 2./expr.sh
5
1
1
6
1
在shell脚本中也可以使用括号代替expr命令计算表达式的值,其形式如下
$((表达式))
例:
#!/bin/sh#在数学表达式中使用加法操作sum=$((3+2))echo $sum#在数学表达式中使用减法操作sub=$((3-2))echo $sub#在数学表达式中使用求余操作mod=$((3%2))echo $mod#在数学表达式中使用乘法操作mul=$((3*2))echo $mul#在数学表达式中使用除法操作div=$((3/2))echo $div
./brace.sh
5
1
1
6
1
4、变量的类型
shell脚本中的变量很特别,因为在这里变量并不区分类型。本质上,shell脚本中的变量都是字符串,在对变量的解释上则依赖于shell脚本中的变量定义。例如,整数变量也是一个字符串,shell允许比较操作和整数操作。其中的关键因素是,这个整型变量中的值是否只有数字。如果只有数字则在进行整数操作时将其解释为一个整型,如果还包括其他的字符,则只能将其解释为字符串。例:
#!/bin/sha=1024 #整型变量a,将其赋值为1024((a=$a+1)) #累增变量a的值echo "the value of a is :$a"b=102a #在整型数据中混杂一个字母,把变量b从整型变为字符串echo "the value of b is $b"declare -i b #使用declare命令,明确指定变量b值是一个整型变量echo "the value of b is :$b"c="" #c变量的值是一个空值echo "the value of c is :$c"((c=$c+1)) #使用加法运算符操作一个值为空的变量echo "the value of c is :$c"((d=d+1)) #使用加法运算符操作没有声明的变量echo "the value of d is :$d"$ ./test.sh
the value of a is :1025
the value of b is 102a
the value of b is :102a
the value of c is :
the value of c is :1
the value of d is :1
shell脚本不区分变量的类型有好处也有坏处。好处是使shell脚本程序变得更加灵活,编写代码的难度也更小了;坏处是这种方法产生错误的几率很高,而且会使程序员
养不好的编程习惯。
5、操作自定义变量
例:
#!/bin/shecho linux $versionecho "set default-value"echo linux ${version:-2.6.12} #设置变量的默认值echo the value is :$version #变量本身的值并没有改变version="new version" #将变量赋值echo linux ${version:-2.6.12} #再次输出该变量的值./test.sh
linux
set default-value
linux 2.6.12
the value is :
linux new version6、位置变量
在运行一个shell脚本时可以向脚本传递命令参数,这些命令行参数可以在shell脚本内部被引用到。根据每一个命令参数的位置,在shell中可以使用$1-$9来表示。$0表示当前执行进程的文件名,也就是程序的执行文件名。
例:
#!/bin/shecho No.0 $0echo No.1 $1echo No.2 $2echo No.3 $3echo No.4 $4echo No.5 $5echo No.6 $6echo No.7 $7echo No.8 $8echo No.9 $9
$ ./test.sh 1 2 3 4 5 6 7 8 9 10
No.0 ./test.sh
No.1 1
No.2 2
No.3 3
No.4 4
No.5 5
No.6 6
No.7 7
No.8 8
No.9 9
由此可知,空余的位置变量会被设置为空值,而多余的命令行参数则不能被保存在位置变量中。位置变量的作用是很大的,活用位置变量将大大提高shell脚本的功能。
7、重新分配位置变量使用shift命令会重新分配位置参数,该操作把所有的位置参数都向左移动一个位置,也就是说原来的$2变成了$1,而$9变成了$8,原来的$1就消失了,但是$0(shell脚本文件名称)是不会改变的。如果传递了大量的位置参数到脚本中,那么shift命令允许用户访问超过位置变量所能表示的命令行参数。
例:
#!/bin/shecho No.0 $0echo No.1 $1echo No.2 $2echo No.3 $3echo No.4 $4echo No.5 $5echo No.6 $6echo No.7 $7echo No.8 $8echo No.9 $9shiftecho No.0 $0echo No.1 $1echo No.2 $2echo No.3 $3echo No.4 $4echo No.5 $5echo No.6 $6echo No.7 $7echo No.8 $8echo No.9 $9./test.sh 1 2 3 4 5 6 7 8 9 10
No.0 ./test.sh
No.1 1
No.2 2
No.3 3
No.4 4
No.5 5
No.6 6
No.7 7
No.8 8
No.9 9
No.0 ./test.sh
No.1 2
No.2 3
No.3 4
No.4 5
No.5 6
No.6 7
No.7 8
No.8 9
No.9 10
8、只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
例:
#!/bin/shmyUrl="http://www.w3cschool.cc"readonly myUrlmyUrl="http://www.runoob.com"运行脚本,结果如下:
./test.sh: 行 5: myUrl: 只读变量
9、获取字符串长度
#!/bin/shstring="abcd"echo ${#string}./test.sh
4
10、Shell 字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。
11、提取子字符串
从左边开始
#!/bin/shstring="runoob is a great site"echo ${string:0:1} echo ${string:1:1}echo ${string:1:4}echo ${string:3:5}$ ./test.sh
r
u
unoo
oob i
从右边开始
#!/bin/shstring="123456789"echo ${string:0-0:1}echo ${string:0-0} echo ${string:0-1:1} echo ${string:0-2:1}echo ${string:0-5:4}echo ${string:0-4:5} echo ${string:0-8}$ ./test.sh
1
123456789
9
8
5678
6789
23456789
12、查找子字符串
#!/bin/shstring="runoob is a great company"echo `expr index "$string" ge`echo `expr index "$string" ru`echo `expr index "$string" is`注意: 以上脚本中 "`" 是反引号,而不是单引号 "'",不要看错了哦。
13
1
8
在Shell中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
数组名=(值1 值2 ... 值n)
例如:
array_name=(value0 value1 value2 value3)或者array_name=(value0value1value2value3)还可以单独定义数组的各个分量:
array_name[0]=value0array_name[1]=value1array_name[n]=valuen可以不使用连续的下标,而且下标的范围没有限制。
14、读取数组
读取数组元素值的一般格式是:
${数组名[下标]}
例如:
valuen=${array_name[n]}
使用@符号可以获取数组中的所有元素,例如:
echo ${array_name[@]}
获取数组长度的方法与获取字符串长度的方法相同,例如:
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
- Shell变量
- Shell变量
- shell 变量
- Shell 变量
- Shell变量
- shell变量
- shell变量
- shell 变量
- Shell ”变量“
- Shell变量
- SHELL 变量
- shell变量
- shell变量 ***
- shell变量
- shell 变量
- 【shell】变量
- shell 变量
- shell变量
- python request请求rabbitmq http api抓取队列列表
- react native关闭键盘
- Nginx + Uwsgi + Django前后端分离部署
- 手把手教会你如何玩转SpringMVC
- Ubuntu 16.04 数据库的卸载和安装
- shell变量
- python核心编程笔记chapter1
- 98DX3236交换机PCB阻抗线计算
- java.lang.SecurityException: JCE cannot authenticate the provider BC
- 初识MD5
- VPP API注册回调函数--待完成
- 三级模式两级映像/数据库系统结构
- zookeeper 3.4.6启动抛出 Invalid arguments, exiting abnormally java.lang.NumberFormatException 异常
- Git使用流程