Questions tagged «shell-script»

有关shell脚本,由shell解释的可执行文件(bash,zsh等)的问题。

2
`tee`命令
tee可以将管道标准输入重定向到标准输出和文件。 echo Hello, World! | tee greeting.txt 上面的命令将在终端屏幕上显示问候语,并将其保存在greeting.txt文件内容中,如果该名称中没有该问候语,则创建该文件。 还有一个-a开关,tee用于附加到现有文件而不是覆盖。 是否有一种方便的方法将管道输入重定向到命令和标准输出而不是文件? 我正在尝试创建一个包装器脚本,buku以将由其索引号指定的书签的URL复制到主选择中。 # bukuc: #!/bin/sh url=$(buku -f 1 -p $1 | cut -f 2) # NUMBER : URL echo $url # DISPLAY echo $url | xsel # PRIMARY SELECTION 在这里,我使用echo 了两次,第一次用于在终端上显示,然后保存在主选择中(剪贴板)。 我想象echo $url | teeC xsel在传递给下一个命令(链接命令)之前显示输出的某种东西或捷径,这将使我可以将整个命令链接成一行,而无需将结果保存到变量中,如下所示: buku -f 1 -p $1 …

2
将命令行参数传递给Shell脚本中的程序
至于./script.sh arg1 [arg2 arg3 ...],命令行参数arg1,arg2......可以得到通过$1,$2...,但是参数的数目是不固定的。 在shell脚本中,我想将参数从arg2传递给程序, #/bin/bash ... /path/to/a/program [I want to pass arg2 arg3 ... to the program] ... 由于可能存在一个或多个参数,我该怎么办?

6
如何等待shell脚本中的文件?
我正在尝试编写一个shell脚本,该脚本将等待文件出现在/tmp名为的目录中sleep.txt,一旦找到该程序,它将停止运行,否则我希望该程序处于睡眠(已暂停)状态,直到找到该文件为止。现在,我假设我将使用测试命令。所以,像 (if [ -f "/tmp/sleep.txt" ]; then stop else sleep.) 我是刚开始编写Shell脚本的人,对您的帮助非常感谢!

3
Bash引发错误,第8行:$ 1:未绑定变量
我正在尝试学习如何使用getopts,以便我可以使用具有经过解析的输入的脚本(尽管我认为getopts可能更好)。我正在尝试编写一个简单的脚本以返回分区使用率。问题是我的bash函数之一似乎不喜欢我$1在函数中引用为变量。我引用的原因$1是因为get_percent可以将函数传递给安装点作为显示而不是所有安装点的可选参数。 剧本 #!/usr/bin/bash set -e set -u set -o pipefail get_percent(){ if [ -n "$1" ] then df -h $1 | tail -n +2 | awk '{ print $1,"\t",$5 }' else df -h | tail -n +2 | awk '{ print $1,"\t",$5 }' fi } usage(){ echo "script usage: $(basename …

7
如何检查目录是否为空
我有一个要求,如果我执行./123带有空路径参数的脚本,请说/usr/share/linux-headers-3.16.0-34-generic/.tmp_versions(此目录为空)。它应该显示“目录为空” 我的代码是: #!/bin/bash dir="$1" if [ $# -ne 1 ] then echo "please pass arguments" exit fi if [ -e $dir ] then printf "minimum file size: %s\n\t%s\n" \ $(du $dir -hab | sort -n -r | tail -1) printf "maximum file size: %s\n\t%s\n" \ $(du $dir -ab | sort …

2
以双连字符(-)开头的shebang如何工作?
我在RosettaCode页中发现了以下类型的shebang: --() { :; }; exec db2 -txf "$0" 它适用于Db2,适用于Postgres。但是,我不了解整条线。 我知道双破折号是SQL中的注释,此后它使用一些参数将文件本身作为文件传递给Db2可执行文件。但是圆括号,卷曲的小节,冒号和分号又如何替换真正的shebang#呢?? https://rosettacode.org/wiki/Multiline_shebang#PostgreSQL

2
在Linux Shell脚本中将xlsx转换为xls
我需要使用shell命令将“ .xlsx”文件转换为“ .xls”。 在我的工作中,我们当前正在使用xlsx2csv命令,但现在要求已更改,我们需要将所有“ .xlsx”文件转换为“ .xls”文件以进行进一步计算。 为此,我工作的某个人开发了一个命令,可以将“ .xlsx”转换为“ .xls”,但是仅适用于一张纸。 一个文件中有多个工作表。 提前致谢....


1
POSIX是否等同于GNU超时?
timeout对于某些脚本情况,GNU coreutils 命令非常方便,如果可以快速运行,则允许使用命令的输出;如果花费太长时间,可以跳过该命令的输出。 如何近似timeout仅使用POSIX指定的实用程序的基本行为? (我想它可能涉及的组合wait,sleep,kill和谁知道什么,但也许我失去了一个更简单的方法。)

2
如何从Shell脚本安全地创建和访问临时文件?
我已经读到将输出重定向到其中的一个固定名称文件/tmp可能会带来安全风险,因为如果攻击者(或恶意内容)/tmp/tmpfileformyscript.tmp在运行脚本时注意到已创建文件(即使他没有访问我的文件的权限),脚本),例如,他可以进行符号链接ln -s ~wildcard/.bashrc /tmp/tmpfileformyscript.tmp,这会导致我.bashrc在运行脚本时破坏文件。 因此,我可以使用filename="tmpfile.tmp.$RANDOM" ; echo outputtext > "$filename"。 但是,有时我想使用一个tmp文件进行缓存,在这种情况下,我想知道“ tmpfile.tmp。*”是否匹配其中的任何内容/tmp,如果匹配,请使用该文件而不是创建一个新文件。不幸的是test,[ -f filename ]据我所知,等效项不支持文件遍历。 因此,我的问题是双重的: 如何安全地创建一个临时文件?是"predictablename.$RANDOM"可接受的做法还是有更好(更安全,更轻松)的方法? 如何在以后通过检查轻松访问文件和/或确定其存在predictablename?


3
Shell中的日期验证
我想在shell脚本中验证以下日期格式 2015-Jul-13 我正在使用,date -d "2015-Jul-13" +"%Y-%b-%d"但是它给了错误 date: invalid date '2015-Jul-13'

3
准备命令问题的答案
假设我想编写一个仅执行一个命令的shell脚本。但是此命令的设计不当。它不提供任何命令行选项。相反,它会问一些问题并等待用户输入。 有没有办法在脚本中准备此输入,因此问题会自动得到回答?

9
筛选或通过管道传输文件的某些部分
我有一个输入文件,其中的某些部分用开始和结束标记来分隔,例如: line A line B @@inline-code-start line X line Y line Z @@inline-code-end line C line D 我想对此文件进行转换,以使X,Y,Z行通过某些命令(nl例如)过滤,但其余各行保持不变。请注意,nl(数字行)在行之间累积状态,因此并不是将静态转换应用于X,Y,Z行。(编辑:有人指出,nl在不需要积累状态的模式可以工作,但我只是用nl作为一个例子来简化这个问题在现实中的命令是一个更复杂的自定义脚本。什么我期待对于将标准过滤器应用于输入文件的子部分的问题的通用解决方案) 输出应如下所示: line A line B 1 line X 2 line Y 3 line Z line C line D 文件中可能有几个此类需要转换的部分。 更新2我最初没有指定如果有更多的部分应该发生什么,例如: line A line B @@inline-code-start line X line Y line Z @@inline-code-end …

6
将ssh公钥复制到多个Linux主机
我正在尝试将.ssh / id_rsa.pub从我们的中央服务器复制到多个服务器。我有以下脚本,通常用于将更改推送到其他服务器。 #!/bin/bash for ip in $(<IPs); do # Tell the remote server to start bash, but since its # standard input is not a TTY it will start bash in # noninteractive mode. ssh -q "$ip" bash <<-'EOF' EOF done 但是在这种情况下,我需要在本地服务器上分配公共密钥,然后将其添加到多个服务器。有没有一种方法可以使用上面的此处文档脚本执行以下操作。 cat .ssh/id_rsa.pub |ssh tony@0.0.0.0 'cat > .ssh/authorized_keys'
14 shell-script  ssh 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.