Questions tagged «shell-script»

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

6
从文件中删除行,具体取决于在另一个文件中找到的行
文件file1.txt包含以下行: /api/purchase/<hash>/index.html 例如: /api/purchase/12ab09f46/index.html 文件file2.csv包含以下行: <hash>,timestamp,ip_address 例如: 12ab09f46,20150812235200,22.231.113.64 a77b3ff22,20150812235959,194.66.82.11 我想过滤file2.csv,以删除在file1.txt中也存在哈希值的所有行。就是说: cat file1.txt | extract <hash> | sed '/<hash>/d' file2.csv 或类似的东西。 它应该很简单,但是我似乎无法使其工作。 任何人都可以为该任务提供有效的管道吗?

4
从文本文件中拆分字符串的快速方法?
我有两个文本文件:string.txt和lengths.txt String.txt: abcdefghijklmnopqrstuvwxyz lengths.txt 5 4 10 7 我想获取文件 >Entry_1 abcde >Entry_2 fghi >Entry_3 jklmnopqrs >Entry_4 tuvwxyz 我正在处理大约28,000个条目,它们在200至56,000个字符之间变化。 目前,我正在使用: start=1 end=0 i=0 while read read_l do let i=i+1 let end=end+read_l echo -e ">Entry_$i" >>outfile.txt echo "$(cut -c$start-$end String.txt)" >>outfile.txt let start=start+read_l echo $i done <lengths.txt 但这效率很低。还有更好的主意吗?


3
在Bash中从字符串转到“单词”数组
我需要从字符串转到数组,其中每个条目都是该字符串上的每个单词。例如,从以下开始: VotePedro="Vote for Pedro" 我需要数组: Vote For Pedro 然后,我应该可以将其迭代为: for i in "${votePedroArray[@]}" do ## Do something done

3
是否应该在Shell脚本中的路径变量末尾使用斜杠?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 4年前关闭。 今天写我的shell脚本时。 我突然想到一个问题。 由于cd /target_dir和cd /target_dir/都有效。 我是否应该在Shell脚本的路径变量末尾添加斜杠? 如LOG_PATH=/data/nginx/logs对LOG_PATH=/data/nginx/logs/。 我在Google上进行了总体搜索,但没有找到关于此的讨论,也许这太基础了? 目前,我真的很难决定选择哪种风格。 但我更喜欢LOG_PATH=/target_dir/样式。 因为当我使用bash进行自动补全时,它会以斜杠弹出结果。 您对此有何看法?

4
如何自动分配回路设备?
我正在编写一些Shell脚本来处理某些磁盘映像内容,并且需要使用循环设备来访问某些磁盘映像。但是,我不确定如何在不使程序处于竞争状态的情况下正确分配循环设备。 我知道我可以losetup -f用来获取下一个未分配的循环设备,然后像这样分配该循环设备: ld=$(losetup -f) sudo losetup $ld myfile.img dostuffwith $ld 但是,在我想同时运行程序的多个实例的情况下,这几乎是关于竞赛条件的教科书示例,这让我非常困扰。如果我正在运行该程序的多个实例,或者其他程序也试图获取一个循环设备,则每个进程可能无法在下一个调用之前分配循环设备losetup -f,在这种情况下,两个进程都将认为同一循环设备可用,但只有一个设备可以使用。 我可以为此使用外部同步,但是我想(如果可能)避免额外的复杂性。同样,其他使用循环设备的程序也不太可能遵循我可能提出的任何同步要求。 如何避免这种潜在的比赛状况?理想情况下,我希望能够以原子方式发现和绑定循环设备,例如,使用以下命令: ld=$(sudo losetup -f myfile.img) dostuffwith $ld 但是,当我这样做时,$ld不会分配给循环设备路径sudo,而是将其移出,因为这样会导致sudo ld=$(losetup -f myfile.img)权限错误。


2
括号在bash shell本身有效,但在bash脚本中无效
我可以从命令行提示符运行以下命令: cp -r folder/!(exclude-me) ./ 以递归方式将folder 除子目录之外的所有内容复制exclude-me到当前目录中。这完全符合预期。但是,我需要在我编写的bash脚本中使用它: if [ -d "folder" ]; then cp -r folder/!(exclude-me) ./ rm -rf folder fi 但是当我运行脚本时: bash my-script.sh 我得到这个: my-script.sh: line 30: syntax error near unexpected token `(' my-script.sh: line 30: ` cp -r folder/!(exclude-me) ./' 而且我不知道为什么它可以在命令提示符下工作,但是在bash脚本中完全相同的行不起作用。

2
Shell脚本计数字符时遇到问题
我正在尝试学习基础知识,而我的脚本在计算用户输入的字符时遇到了一个问题。这是我的脚本,有人可以指出我要去哪里了吗? #!/bin/bash echo "Enter a word!" read INPUT_STRING len= echo $INPUT_STRING | wc -c echo "Your character length is " $len exit

3
如何通过使用find unix命令获取绝对路径
如何使用find命令获取绝对路径。 实际上我正在运行以下脚本: find . -size +20M | while read a do i=$(echo $a | sed 's:/: :g') echo $a; j=($i) fileName=${j[${#j[@]}-1]} userName=${j[${#j[@]}-3]} done 但是这里变量$a显示从开始的路径,./Downloads/filename但我想要从的绝对路径/。

6
从bibtex文件中提取选定条目的脚本
我有一个很大的bibtex文件,其中包含许多条目,每个条目都具有常规结构 @ARTICLE{AuthorYear, item = {...}, item = {...}, item = {...}, etc } (在某些情况下,ARTICLE可能是一个不同的词,例如BOOK) 我想做的是编写一个简单的脚本(最好仅是一个Shell脚本)以提取具有给定AuthorYear的条目并将其放入新的.bib文件中。 我可以想象我可以通过AuthorYear识别条目的第一句,而通过单引号可以识别条目的末尾,}也许可以sed用来提取条目,但是我真的不知道该怎么做。有人可以告诉我我将如何实现这一目标吗? 可能应该是这样的 sed -n "/AuthorYear/,/\}/p" file.bib 但这由于}条目的第一项的关闭而停止,从而给出以下输出: @ARTICLE{AuthorYear, item = {...}, 因此,我需要识别出这是否}是一行中唯一的字符,并且在这种情况下,只有“ sed”停止读取。

4
当CPU /内存使用率过高时,Bash脚本会自动终止进程
我创建了一个脚本,该脚本可以在CPU和/或内存使用率达到80%时终止进程。发生这种情况时,它将创建一个被终止进程的列表。我该怎么做才能改善它? while [ 1 ]; do echo echo checking for run-away process ... CPU_USAGE=$(uptime | cut -d"," -f4 | cut -d":" -f2 | cut -d" " -f2 | sed -e "s/\.//g") CPU_USAGE_THRESHOLD=800 PROCESS=$(ps aux r) TOPPROCESS=$(ps -eo pid -eo pcpu -eo command | sort -k 2 -r | grep -v …

4
为什么不能通过击键杀死Bash脚本调用的超时?
[编辑:这看起来与其他一些问题类似,询问如何杀死所有产生的进程-答案似乎都是使用pkill。因此,我的问题的核心可能是:是否可以将Ctrl-C / Z传播到脚本生成的所有进程?] 当rec使用timeout来自coreutils 的命令调用SoX 时(这里已讨论),一旦从Bash脚本中调用它,似乎没有任何办法可以通过击键杀死它。 例子: timeout 10 rec test.wav ...可以用bash中的Ctrl+ C或Ctrl+ 杀死Z,但不能从脚本内部调用。 timeout 10 ping nowhere ...可以被杀死Ctrl+ C或Ctrl+ Z从庆典,并与Ctrl+ Z当它在脚本中运行。 我可以找到进程ID并以这种方式将其杀死,但是为什么不能使用标准的击键动作呢?并且有什么方法可以构造我的脚本,以便可以吗?

3
用bash自动化gnuplot绘图
我有6个文件,需要将其绘制为带有误差裕度的折线图,并将它们输出到不同的png文件中。文件格式如下。 秒平均平均值最小值最大值 我将如何自动绘制这些图?因此,我运行一个名为bash.sh的文件,它将获取6个文件,并将图形输出到其他.png文件。还需要标题和轴标签。

2
循环输出管道可防止局部变量修改
我正在尝试编写一个简单的bash函数,该函数将许多文件和/或目录作为其参数。这应该: 完全限定文件名。 对它们进行排序。 删除重复项。 打印所有实际存在的内容。 返回不存在的文件数。 我有一个脚本,几乎可以执行我想要的操作,但是无法进行排序。按原样返回脚本的返回值是正确的,但是输出不是(未排序和重复的)。如果我取消注释所示的| sort -u语句,则输出正确,但返回值始终为0。 注意:欢迎使用更简单的解决方案来解决问题,但问题实际上是为什么在我的代码中会发生这种情况。也就是说,为什么添加管道似乎停止脚本增加变量的作用r? 这是脚本: function uniqfile { local r=0 for arg in "$@" do readlink -e "$arg" || (( ++r )) done #| sort -u ## remove that comment return $r }

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.