欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

shell 变量赋值

shiping1 的头像

shell 变量赋值

2010-01-08 22:17 candytree2008 | 分类:Windows | 浏览4756次
pavg=`echo cat ${ip}pavg.tmp|awk -F / 'NR==9{print $4}'`

给pavg变量赋值, ${ip}pavg.tmp是文件名,cat ${ip}pavg.tmp|awk -F / 'NR==9{print $4}'`是打开文件并读第九行输出第四列。这句话是可以正确执行的。

我现在的目的是把上面的语句输出的结果赋值到pavg中,这个语句怎么写才能正确的赋值?
刚在网上查了一种方法是pavg=`awk '/VmRSS/ {print $2}' < /proc/$PROCESS_PID/status,请问这样可以吗?或者有什么正确的方法吗?`
 
2010-01-08 22:37 提问者采纳
 
pavg=$(cat ${ip}pavg.tmp|awk -F / 'NR==9{print $4}')
这样不行吗, 不要echo试试看

你下面那个中方法 也对 无所谓的 小改即可

来自 http://zhidao.baidu.com/question/132592954.html


Bash字符串处理(与Java对照) - 3.给(字符串)变量赋值

In Java

简单赋值情况

s = "Hello";

 

一次给多个变量赋值的情况

s1 = s2 = "Same";

 

赋值为整数(将整数转换为字符串)

int i = 1234;

s = String.valueOf(i);

或 s = "" + i;

 

In Bash

赋值符号(=)

赋值操作的形式为 VAR=STRING

记住:等号的两边不能有空格!

Advanced Bash-Scripting Guide: 4.2. Variable Assignment 写道
=
the assignment operator (no space before and after)

Caution
Do not confuse this with = and -eq, which test, rather than assign!
Note that = can be either an assignment or a test operator, depending on context.
 

赋值为字符串常量

不包含任何特殊字符的情形

示例:S1=Literal

示例:S1='Literal'

示例:S1="Literal"

示例:S1=$'Literal'

 

包含空格的情形

示例:S2=Hello\ World

示例:S2='Hello World'

示例:S2="Hello World"

示例:S2=$'Hello World'

 

包含单引号的情形

示例:S3=Yes,\ I\'m\ Basher

示例:无法纯粹用单引号来做到

示例:S3="Yes, I'm Basher"

示例:S3=$'Yes, I\'m Basher'

 

包含双引号的情形

示例:S4=It\ is\ very\ \"Stupid\".

示例:S4='It is very "Stupid".'

示例:S4="It is very \"Stupid\"."

示例:S4=$'It is very "Stupid".'

 

多行文本的情形

示例:S5='Hello

World'

示例:S5="Hello

World"

示例:S5=$'Hello

World'

 

赋值为另一个变量的值

普通变量

示例:S2=$S1

示例:S2=${S1}

 

位置参数

示例:S3=$1

示例:S3=${1}

 

赋值为命令行执行输出(命令替换)

格式:S2=`commandline`

格式:S2=$(commandline)

格式:S2="`commandline`"

格式:S2="$(commandline)"

 

创建一个脚本,输出Sha-Bang和Bash执行文件路径,也就是脚本的第一行。

[root@jfht ctmw]# echo '#!'$(which bash) > script.sh 
[root@jfht ctmw]# cat script.sh 
#!/bin/bash
[root@jfht ctmw]#

 

赋值为更复杂的字符串替换结果

示例:S1="Your account is ${ACCOUNT}"

示例:S2="Current Working Directory is $(pwd)"

 

赋值为空串

示例:S=

 

一次性给多个变量赋同一个值

在Java中,我们可以写 a = b = "String";

但是在Bash中,我们只能这样写 A=$B B="STRING"

 

示例:A=$B B=$C

先把变量C赋值给B,再把变量B赋值给A。

注意不能写成:A=B=C,而 A=B B=C 的结果完全与此不同。

 

赋值为文件内容

格式:CONTENT=$(cat filename)

注意:如果filename指定的文件是二进制数据文件,那么CONTENT实际的内容可能实际的不一致。

 

文本文件的情形

[root@jfht ~]# cat file.txt 
1234
2345
4567
5678
[root@jfht ~]# ls -l file.txt 
-rw-r--r-- 1 root root 20 09-07 07:48 file.txt
[root@jfht ~]# S=$(cat file.txt) 
[root@jfht ~]# echo $S 
1234 2345 4567 5678
[root@jfht ~]# echo "$S" 
1234
2345
4567
5678
[root@jfht ~]# echo ${#S} 
19
[root@jfht ~]#

上面的 ${#S} 是用来取得字符串长度的。

即使是文本文件,其长度也是不一致的,但字符串内容是一致的。

 

二进制文件的情形

[root@smsgw root]# ls -l /usr/bin/ac 
-rwxr-xr-x    1 root     root        18452 2006-01-27  /usr/bin/ac
[root@smsgw root]# S=$(cat /usr/bin/ac) 
[root@smsgw root]# echo ${#S} 
13516
[root@smsgw root]# S="$(cat /usr/bin/ac)" 
[root@smsgw root]# echo ${#S}             
13511
[root@smsgw root]#

上面的 ${#S} 是用来取得字符串长度的。

 

问题:为什么使用cat加载文件的内容与实际的文件内容会不同呢?

 

赋值为整数

由于Shell中的变量是无类型的,所有直接将整数赋值给变量即可,无需任何转换手段。

格式:STR=SOME_INTEGER

但如果将一个算式赋值给变量,不会自动计算,可以采用如下几种方式:

格式1:STR=$[EXPR]

格式2:((STR=EXPR))

格式3:let STR=EXPR

格式4:declare -i STR=EXPR

格式5:STR=`expr EXPR`

格式6:STR=$(expr EXPR)

 

[root@jfht ~]# STR=1234 
[root@jfht ~]# echo $STR 
1234
[root@jfht ~]# STR=1234+4321 
[root@jfht ~]# echo $STR     
1234+4321

直接将算式赋值给变量,还是算式本身,不会是计算结果。 
[root@jfht ~]# STR=$[1234+4321] 
[root@jfht ~]# echo $STR        
5555
[root@jfht ~]# ((STR=1234+4321)) 
[root@jfht ~]# echo $STR           
5555
[root@jfht ~]# let STR=1234+4321 
[root@jfht ~]# echo $STR         
5555
[root@jfht ~]# declare -i STR=1234+4321 
[root@jfht ~]# echo $STR                
5555
[root@jfht ~]# STR=`expr 1234+4321` 
[root@jfht ~]# echo $STR            
5555
[root@jfht ~]# STR=$(expr 1234+4321) 
[root@jfht ~]# echo $STR             
5555
[root@jfht ~]#

来自   http://codingstandards.iteye.com/blog/1167238


普通分类: