SHELL中SED如何获取变量的值

SHELL中SED如何获取变量的值,第1张

sed 在13行后面追加内容简单,

sed -i '13 a\123456789' grubconf

前提是13行有内容才能成功

你试了一下你的命令,AAA变量没有内容啊,如果想用变量就把单引号变成双引号试试

系统定义的变量:

这些变量由 *** 作系统(Linux)自身创建并维护,通常它们以大写字母定义,我们可以通过命令“$ set”来查看这些变量。下面列出了部分系统定义的变量:

系统定义的变量

意义

BASH=/bin/bash

Bash Shell 名称

BASH_VERSION=412(1)

Bash 版本

COLUMNS=80

你的屏幕宽度(列数)

HOME=/home/linuxtechi

用户家目录

LINES=25

你的屏幕高度(行数)

LOGNAME=LinuxTechi

当前登录用户的名字

OSTYPE=Linux

*** 作系统类型

PATH=/usr/bin:/sbin:/bin:/usr/sbin

可执行文件搜索路径

PS1=[\u@\h \W]\$

命令行提示符

PWD=/home/linuxtechi

当前工作目录

SHELL=/bin/bash

Shell 名称

USERNAME=linuxtechi

当前登录的用户名

要打印以上变量的值,可以使用echo command命令,如下:

# echo $HOME# echo $USERNAME

我们可以通过在环境变量名前前置一个美元符号来从你的脚本里输入环境变量。请看下面脚本演示:

$ cat myscript #!/bin/bash# display user information from the systemecho “User info for userid: $USER”echo UID: $UIDecho HOME: $HOME

注意:echo命令中的环境变量在脚本运行时会被它们的值替代。同时注意,我们可以再第一个字符串的双引号中放置$USER系统变量,而shell脚本仍然可以明白我们的意思。然而,该方法有一个缺点。看下面这个例子:

$ echo “The cost of the item is $15”The cost of the item is 5

很明显,那不是我们说希望的。无论何时,当脚本遇见引号中的美元符号时,它都会认为你是在调用一个变量。在本例中,该脚本试着显示变量$1(而这个变量并没有定义),然后显示数字5。要显示实际上的美元符号,你必须前置一个反斜线字符:

$ echo “The cost of the item is \$15”The cost of the item is $15

那样好多了。反斜线允许shell脚本将美元符号解释成为实际的美元符号,而不是变量。

用户定义的变量:

这些变量由用户定义。shell脚本允许我们在脚本中设置并使用我们自己的变量。设置变量允许你临时存储数据并在脚本中使用,让shell脚本看起来像一个真正的计算机程序。

用户变量可以是任何不超过20个的字母、数字或者下划线字符的文本字符串(LCTT 译注:变量只能以字母或下划线开头)。用户变量是大小写敏感的,因此,变量Var1和变量var1是不同的变量。这个小规则常常让新手编写脚本时麻烦重重。

我们可以通过等于号为变量赋值。变量,等于号和值(对于新手又是个麻烦的地方)之间不能有空格。下面是几个给用户变量赋值的例子:

var1=10var2=-57var3=testingvar4=“still more testing”

shell脚本为变量值自动确定数据类型。shell脚本内定义的变量会在脚本运行时保留它们的值,当脚本完成后则删除这些值。

就像系统变量一样,用户变量也可以使用美元符号来调用:

$ cat test3#!/bin/bash# testing variablesdays=10guest="Katie"echo "$guest checked in $days days ago"days=5guest="Jessica"echo "$guest checked in $days days ago"$

运行脚本会产生以下输出:

$ chmod u+x test3$ /test3Katie checked in 10 days agoJessica checked in 5 days ago$

每次变量被调用,它都会变成了当前分配给它的值。有一点很重要,当调用一个变量值时,你使用美元符号,但是当为一个变量分配一个值时,你不能用美元符号。下面用例子来说明:

$ cat test4#!/bin/bash# assigning a variable value to another variablevalue1=10value2=$value1echo The resulting value is $value2$

当你使用赋值语句中value1变量的值时,你仍然必须使用美元符号。这段代码产生了如下输出:

$ chmod u+x test4$ /test4The resulting value is 10$

如果你忘了美元符号,而又让value2赋值行看起来像这样:

value2=value1

你会获得下面的输出:

$ /test4 The resulting value is value1$

没有美元符号,shell解释变量名为普通文本字符串,这极有可能不是你想要的。

在shell变量中使用反引号(`):

反引号允许你将shell命令的输出赋值给变量。虽然这似乎没什么大不了,但它是脚本编程中主要的构建基块。你必须使用反引号将整个命令行包含起来:

testing=`date`

shell会在反引号中运行命令,然后将输出结果赋值给变量testing。下面的例子给出了如何使用一个常规shell命令的输出结果来创建一个变量:

$ cat test5#!/bin/bash# using the backtick charactertesting=`date`echo "The date and time are: " $testing$

变量testing接收来自date命令的输出结果,而它又在echo语句中被调用。运行脚本会产生如下输出:

$ chmod u+x test5$ /test5The date and time are: Mon Jan 31 20:23:25 EDT 2011

注:在bash中,你也可以选用$()语法来替换反引号(`),它有个优点就是可以重用(re-entrant)。

例:

$ echo " Today’s date & time is :" $(date)Today’s date & time is : Sun Jul 27 16:26:56 IST 2014

如果要查看当前所有环境变量的设置,可以用env命令,例子如下:

-bash-300# env

HZ=100

LC_MONETARY=en_USISO8859-1

SHELL=/usr/bin/bash

TERM=ansi

LC_NUMERIC=en_USISO8859-1

MAIL=/var/mail/pc

PATH=/usr/sbin:/usr/bin:

LC_MESSAGES=C

LC_COLLATE=en_USISO8859-1

PWD=/export/home/pc

TZ=PRC

SHLVL=1

HOME=/export/home/pc

LOGNAME=pc

LC_CTYPE=en_USISO8859-1

LC_TIME=en_USISO8859-1

_=/usr/bin/env

如果只想看指定的变量设置,如路径PATH的设置,可以用 "echo $PATH"或 “ env | grep PATH"或” env | grep -i path"来查询。前面的适合知道全名的,后面2种适合只知道部分字段或者部分关键字母(甚至不确定字符大小写)的。

-bash-300# echo $PATH

/usr/sbin:/usr/bin:

-bash-300# env | grep PATH

PATH=/usr/sbin:/usr/bin:

将一条命令的执行结果取得命令执行结果的值有:

1、使用反引号`` (数字键1左边的键,tab键上面,英文方式输入) 如:a=`echo "hello world"`;即将命令 echo "hello world"的输出赋给变量a

2、可以使用 $(()),如:a=$(echo "hello world"),即将命令echo "hello world"的输出赋给变量a。

以下为具体语句:

实例结果:

shell 是一个交互性命令解释器。shell独立于 *** 作系统,这种设计让用户可以灵活选择适合自己的shell。shell让你在命令行键入命令,经过shell解释后传送给 *** 作系统(内核)执行。

shell是一个命令处理器(command processor)——是一个读入并解释你输入的命令的程序。除了是一个命令中断器以外,shell还是一个程序设计语言。你可以编写shell可以解释的程序(被称为源程序),这些源程序可以包含shell程序设计命令等等。shell除了解释命令以外,还有其他工作,它也可以配置和编程。     

#下面的代码是对于从oracle的sqlplus返回变量值给shell的例子

output=`sqlplus -s unitele/lemontea << EOF

set heading off feedback off verify off

drop function test_get_param_value_p;

CREATE OR REPLACE function test_get_param_value_p

(

is_citycode in varchar2

)

return varchar2

is

on_value varchar2(100);

begin

on_value :='100000';

dbms_outputput_line(on_value);

dbms_outputput_line(is_citycode);

return on_value;

end;

/

select test_get_param_value_p('501') from dual;

exit

EOF

`

echo "Oracle的输出变量值:"$output

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=

存储过程 myproc(in_num in number,out_num out number)

sql脚本模板

先编辑一个mysqlsql文件,内容如下:

------------

var nret number;

execute :nret := 0;--初始化

call myproc(in_code,:nret)--执行存储过程,in_code会被替换掉

/

select 'retcode[' || :nret || ']retcode' from dual--显示结果

/

quit;

-------------

SHELL脚本myshsh,内容如下

-------------

#/myshsh 123

cd /home/myshell

sed "s/in_code/$1/" mysqlsql > mysql01sql

#根据sql脚本模板生成实际脚本

sqlplus usr/pwd@db result$1txt

#执行sql脚本并把结果输入result$1txt

echo ok!

-------------

在LINUX下执行/myshsh 123,生成result123txt,myproc输出参数在'retcode['和']retcode'之间。

以上就是关于SHELL中SED如何获取变量的值全部的内容,包括:SHELL中SED如何获取变量的值、如何在shell脚本中使用变量、shell怎么获取pash环境变量等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9756594.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存