【shell script】变量及其相关操作
shell script中的变量不分数据类型,只有数值和字符串两种值。有几个点需要注意: $ ~相关的内置变量
eg: $变量
给变量赋值NULL
#! /bin/bash
var=
echo ${var}
let var=1+1
echo ${var}
unset var
echo ${var}
执行: [edemon@CentOS workspace]$ ./NULL.sh
2
假设没有给一个变量赋初值(直接使用未定义的变量),那么他的值默认是NULL,可以使用 [edemon@CentOS workspace]$ cat unsigned.sh
#! /bin/bash
echo $unsigned
if [ -z $unsigned ]; then
echo '$unsigned is NULL'
else
echo '$unsigned is not NULL'
fi
[edemon@CentOS workspace]$ ./unsigned.sh
$unsigned is NULL
但是,如果对未赋值的变量进行算术操作,那么相当于在0的基础上操作。bash会把不是整数的整数(比如将string当做整数的情况)当做0。。 awk引用外部shell变量利用 #! /bin/bash
var="hello world"
echo "" |
awk -v str="$var" '{ print str }'
[edemon@CentOS workspace]$ ./awk.sh
hello world
awk运行外部的shell命令实例:利用awk验证 当()内的内容加上引号,awk直接将相关的内容交给shell,当做命令行;当其没有加上引号,awk就将其当做变量处理。 $ [edemon@CentOS url]$ awk '{ system("curl -I "$0) }' url.list
HTTP/1.1 200 OK
Date: Wed,30 Aug 2017 12:23:56 GMT
Server: Apache/2.4.10 (Ubuntu)
Last-Modified: Mon,13 Mar 2017 02:42:01 GMT
ETag: "2c39-54a93a7e73a98"
Accept-Ranges: bytes
Content-Length: 11321
Vary: Accept-Encoding
Content-Type: text/html
HTTP/1.1 200 OK
Date: Wed,13 Mar 2017 02:42:01 GMT
ETag: "2c39-54a93a7e73a98"
Accept-Ranges: bytes
Content-Length: 11321
Vary: Accept-Encoding
Content-Type: text/html
curl: (7) couldn't connect to host
curl: (7) couldn't connect to host
print command | /bin/bash awk 'BEGIN{}{ print "curl -I " $0 | "/bin/bash" }' url.list
命令结果赋予变量将command的结果保存在变量中,单反引号和 [edemon@CentOS workspace]$ arch=`uname -a`
[edemon@CentOS workspace]$ echo $arch
Linux CentOS.com 2.6.32-642.15.1.el6.i686 #1 SMP Fri Feb 24 13:54:50 UTC 2017 i686 i686 i386 GNU/Linux
[edemon@CentOS workspace]$ arch=$(uname -a)
[edemon@CentOS workspace]$ echo $arch
Linux CentOS.com 2.6.32-642.15.1.el6.i686 #1 SMP Fri Feb 24 13:54:50 UTC 2017 i686 i686 i386 GNU/Linux
切片操作切片操作,即获取、访问变量的一部分内容。 [edemon@CentOS workspace]$ cat section.sh
#! /bin/bash
var="123456789"
echo the context from third place: ${var:2}
echo the context from third place and its length is 4: ${var:2:4}
[edemon@CentOS workspace]$ ./section.sh
the context from third place: 3456789
the context from third place and its length is 4: 3456
当索引值是负数的时候,表示从右向左遍历: [edemon@CentOS workspace]$ echo $var
123456789
[edemon@CentOS workspace]$ echo ${var:(-2)}
89
[edemon@CentOS workspace]$ echo ${var:(-3)}
789
[edemon@CentOS workspace]$ echo ${var:(-4):2}
67
子串替换格式: ${varible/object/replaceObj} [edemon@CentOS workspace]$ var=123456789
[edemon@CentOS workspace]$ echo ${var/1/2}
223456789
支持正则表达式: [edemon@CentOS workspace]$ echo ${var/[0-9]*/-}
-
环境变量与root验证shell环境变量,可以通过set命令查看。如: #! /bin/bash
if (( $UID == 0 )); then
echo Root User
else
echo Not Root User.
fi
间接变量eval阅读输入参数,然后将他们拼接起来形成一条命令交给shell处理。 格式: eval [arg ...] 利用eval的特性,可以多级访问shell变量。 #! /bin/bash
var1=123
one=1
two=2
eval var2=$var${one}
eval var3=$var${two}
echo $var3
在 ${!var} 用于访问var代表的值(变量)的值[edemon@CentOS workspace]$ cat direct.sh
#! /bin/bash
a=tmp
tmp=b
echo ${a} # direct
echo ${!a} # indirect
[edemon@CentOS workspace]$ ./direct.sh
tmp
b
IFS
[edemon@CentOS workspace]$ cat IFS
#! /bin/bash
PWD=`pwd`
echo $PWD
IFS='/'
echo $PWD
echo '$PWD'
echo "$PWD"
[edemon@CentOS workspace]$ ./IFS
/home/edemon/workspace
home edemon workspace
$PWD
/home/edemon/workspace
subshell
a=23
( a=24 )
echo $a
# 23
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |