如何获取传入给shell脚本的最后一个参数

如何获取传入给shell脚本的最后一个参数,第1张

执行“nano testsh”创建一个新的shell脚本

脚本testsh的内容如下:

#!/bin/sh

name=$1

echo "the ${name} are great man!"

给新创建的testsh的脚本赋可执行权限,命令为“chmod 755 testsh”。

执行'/testsh "xiao wang"'命令,可以看到自己编写脚本的结果“the xiao wang are great man!”。

"name=$1"中$1为系统提供的位置参数,$0代表程序的名称,[$1/$2/]从1开始为传递的参数。

linux系统除了提供位置参数还提供内置参数,内置参数如下: 

$# ----传递给程序的总的参数数目

$ ----上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。

$ ----传递给程序的所有参数组成的字符串。

$n ----表示第几个参数,$1 表示第一个参数,$2 表示第二个参数 $0 ----当前程序的名称

$@----以"参数1" "参数2" 形式保存所有参数

$$ ----本程序的(进程ID号)PID

$! ----上一个命令的PID

本文介绍以下2个知识点,为后后续在工作过程中安装一键安装脚本打好基础:

如下shell脚本中传入的参数依次值如下:

如脚本 getoptssh

执行 /getoptssh -a dd -b ,打印如下结果

如脚本 forsh

有时候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'之间。

不太明白你表达的意思,是无法看到错误信息还是想保存错误信息?

1、一般来讲,shell命令都是有错误输出的,它会打印在屏幕上,但实际上是标准错误输出文件,如果我不想输出到屏幕,而是写到文件里,我们可以用管道符'>'重定向标准错误输出,比如:

我cat一个不存在的文件,会有错误输出,我可以把错误重定向到文件里

1

2

3

4

5

#cat /tmp/aa

cat: /tmp/aa: No such file or directory

#cat /tmp/aa 2>errlog

#cat errlog

cat: /tmp/aa: No such file or directory

2表示标准错误输出。

另外,我甚至可以把错误输出放到shell变量里:

1

2

3

#aa=$(cat /tmp/aa 2>&1)

#echo $aa

cat: /tmp/aa: No such file or directory

2>&1表示,我把错误输出重定向到标准屏幕输出1上,在赋值给变量aa

2、关于如何调试shell脚本

很简单

1

#sh -vx xxxxsh

上述命令会打印shell脚本的执行过程和结果,有助于排错。当然,某些情况下,可能不会有输出(如shell中有函数,可能就不会输出函数里的过程)。

你本来是想将sqlplus的返回结果赋值给ASM变量,但是你用到了sqlplus /nolog << EOF > /home/oracle/ASMlog,将执行结果重定向到/home/oracle/ASMlog,这时候ASM里面就是空的了。

se

"$x"

in

y

|

yes

)

return

0;;

n

|

no

)

return

1;;

)

echo

"Answer

yes

or

no"

shell结束用return跳出while

true

while

true

是一直为真,不断循环,直到输入yes或no时,用return退出shell程序。程序结束了,循序肯定也结束了。

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

补充:也就是说while

true

实际是一个死循环。我可以这样理解么?我们是用return

返回0或1来退出循环。能把代码运行步骤说一下么。输入三个数据分别是yes,no和其他任意的。

可以说是死循环。不是说所有的死循环都不好,这里的死循环保证了程序一直运行,直到得到你想要的结果。

输入yes,返回0,就是正常结束

输入no,返回1,就是异常结束

输入其它的,则进行下一轮循环,要求你重新输入

本文介绍 MySQL 80 shell 子模块 Util 的两个导入特性 importTable/import_table(JS和python 版本的命名差异)、importJson/import_json的使用方法。

其中 import_table 是通过传统 MySQL 协议来通信,Import_json 是通过 X 插件协议来通信。MySQL 一直以来提供导入文件 SQL 命令 load data infile(单线程)以及对应的可执行文件 mysqlimport(多线程)。

比如我导入 100W 行示例数据到表 ytttl1,花了 24 秒。这个已经是 MySQL 默认导入来的最快的。分析那我们现在看下 mysqlimport 工具的升级版,mysqlshell 的 util 工具集。

使用这两个工具之前,必须得临时开启 local_infile 选项。1 import_table建立 3306 端口的新连接我这里切换为 python 模式清空掉示例表 Ytttl1import_table 有两个参数,第一个参数定义导入文件的路径,第二个定义相关选项,比如导入的格式,并发的数量等。定义文件路径(参数1)定义选项(参数2)执行导入:只花了不到 17 秒,比传统 mysqlimport 快了不少。

我们上面指定了显式指定了字段分隔符,那有没有已经定义好的组合格式呢? 答案是有的,选项 dialect 可以指定以下格式:csv,tsv,json,csv-unix那么上面的导入,我们可以更简单,改下变量 y_options1 的定义导入时间差不多。这里要说明下,dialect 选项的优先级比较低,比如添加了'linesTerminatedBy':'\r\n', 则覆盖他自己的'\n'。

选项 diaelect 还有一个可选值为 json,可以直接把 json 结果导入到文档表里。比如我新建一张表 tl1_json重新定义文件以及导入选项。导入 JSON 数据速度也还可以,不到 24 秒。那导入 json 数据,就必须得提到以 X 插件协议通信的工具 import_json了。2 imort_json我们切换到 mysqlx 端口import_json 参数和 Import_table 参数类似,这里我改下选项我在手册上没有看到多线程的选项,所以单线程跑 35 秒慢了些。查看刚刚导入的数据import_json 不仅仅可以导入 Json 数据,更重要的是可以在 BSON 和 JSON 之间平滑的转换,有兴趣的同学可以去 TRY 下。

$获取每一步执行的结果,输出到日志中就是正常的写日志动作就行

echo "" > /var/log/你的log

或者rsyslog啥的,我记得有个函数,你用这个函数也行。

以上就是关于如何获取传入给shell脚本的最后一个参数全部的内容,包括:如何获取传入给shell脚本的最后一个参数、shell脚本获取参数&在线执行shell脚本、shell中怎么获取存储过程的输出参数给变量等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存