如何传递参数给linux shell 脚本(当脚本从标准输入而不是从文件获取时)

1)catxxx.sh|sh可以执行从标准输入获取的脚本,但无法传递参数2)用xxx.shabc可以执行带参数的脚本,但是是从文件读取脚本。我现在需要从加密的数据中解密出... 1)cat xxx.sh | sh可以执行从标准输入获取的脚本,但无法传递参数
2)用xxx.sh a b c可以执行带参数的脚本,但是是从文件读取脚本。
我现在需要从加密的数据中解密出一个脚本并执行。因为安全的原因,我不想将脚本保存成文件再执行,以避免留下痕迹。所以需要像1)那样直接执行脚本,但由于脚本有参数,又需要像2)那样可以传递参数给脚本,如何才能实现。
注:我参考了shc,发现shc好像没有考虑到这个问题。
我要实现的是shell加密,原理类似于shc。即先将shell脚本的内容加密成数据,然后写个程序解密出来并直接丢给/bin/sh运行。由于安全方面的原因,不希望将解密出来的脚本中间保存到文件系统。目前使用的方式是用dup2将标准输入重定向,然后将解密出来的shell脚本输出到标准输入,再调用/bin/sh来运行,相当于cat test.sh | sh。结果是可行的。但我那脚本需要传递参考,怎么传递参数就不会了。
展开
 我来答
pensiero
推荐于2016-07-11 · TA获得超过1.1万个赞
知道大有可为答主
回答量:6921
采纳率:83%
帮助的人:1228万
展开全部
sh 绝对路径/xxx.sh 参数1 参数2 参数3........参数n

---------------------------------------------------------------------------------
如果你保存临时文件的话,可以使用xargs
比如脚本文件为1.sh,而参数保存在args文件中,用一个命令得到参数内容
cat args
那么最后可以这样执行
cat args |xargs sh 1.sh

如果不打算保存临时文件,那你只好在脚本中写清楚要如何调用,参数有几个。
比如你使用2.sh调用1.sh,在2.sh 中写清楚
1.sh $arg1 $arg2这样就可以了。
当然脚本中的arg1,arg2也可以是最初的第一个脚本调用传递进来的,也可以是硬编码写死的。
肃穆还通顺灬布丁737
2011-10-24 · 超过12用户采纳过TA的回答
知道答主
回答量:68
采纳率:0%
帮助的人:46.7万
展开全部
sh filename1.sh `cat filename2.txt`

·是反引号,esc下面的键
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gamegjx
2012-06-30
知道答主
回答量:3
采纳率:0%
帮助的人:4750
展开全部
sh xxx.sh a b c < file
cat <&0
这样就可以处理标准输入的内容了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dedacdedac
2020-05-03
知道答主
回答量:6
采纳率:0%
帮助的人:5868
展开全部
[root@localhost ~]# cat shift.sh
#!/bin/bash
a=''
b=''
c='ccc'
while [ -n "$1" ]
do
case "$1" in
-a) a="$2"
shift ;;
-b) b="$2"
shift ;;
-c) c="$2"
esac
shift
done
out=${b}_${a}_${c}
echo ${out}
[root@localhost ~]# sh shift.sh -c ccc -b bbb -a aaa
bbb_aaa_ccc
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式