【Linux bash常用快捷键】教程文章相关的互联网学习教程文章

linux – bash执行整个脚本,但如果任何中间作业失败,则返回退出代码> 0【代码】

我有一个bash脚本script.sh如下:./step1.sh ./step2.sh ./step3.sh每个步骤* .h脚本都会返回正确的错误代码,无论它们是否失败. 现在,如果step3.sh失败,我会得到一个合适的退出代码,但是如果step1.sh或step2.sh失败并且step3.sh成功,那么我得到status = 0,这是不理想的. 我知道我可以使用set -e在我的脚本的顶部,如果任何中间步骤失败,使脚本失败,但这不是我想要的. 我想知道是否有一个简单的选项可用于执行每个中间脚本(即使其中一...

linux – 在bash中按多列排序【代码】

我有一个包含2列的文件,“Name”和“Age”,如下所示:Alex, 15 Mary, 12 Alex, 28 Zoe, 16 Alex, 17我将按字母顺序排序第一列,使用sort -t’,’ – k1,1 filename.txt,但如果有相同的名称,我希望第二列按照它们的相反方式排序原始文件,如下所示:Alex, 17 Alex, 28 Alex, 15 Mary, 12 Zoe, 17我怎样才能做到这一点?解决方法:从后面读取文件,按第一列和-s排序,以便在相同值的情况下保留顺序tac filename.txt | sort -...

linux – BASH语法检查调试模式故障?【代码】

我们可以使用bash -n script.sh来验证shell脚本的语法.但是,当我尝试测试此函数时,我注意到此选项无法找到所有语法错误. 例如:root@ubuntu:~/testenv# cat test #!/bin/bash SEND=1 if [ "$SEND" -eq 0 ]echo no fi现在,让我们测试脚本:root@ubuntu:~/testenv# bash -n test test: line 5: syntax error near unexpected token `fi' test: line 5: `fi'它工作正常.但是,如果我只删除其中一个括号:root@ubuntu:~/testenv# cat ...

为什么管道可以使用的进程之间的关系在Linux API和Bash中是不同的

我想知道为什么管道可以使用的进程之间的关系在Linux API和Bash中是不同的. >在Linux API中,未命名的管道(pipe())只能在父子进程之间使用.>在Bash中,可以在两个进程之间使用管道,这两个进程将shell进程作为其共同父进程. Bash中的管道是否根据Linux API中未命名的管道实现?谢谢. 来自APUE 3ed:15.2 Pipes Pipes are the oldest form of UNIX System IPC and are provided by allUNIX systems. Pipes have two limitations.Histo...

linux – Bash – 重命名文件,里面有“【代码】

好的我有一个函数,它将作为参数一个字符串,它将输出一个没有任何空格的新字符串,’,“function rename_file() {local string_to_change=$1 local length=${#string_to_change} local i=0 local new_string=" " local characfor i in $(seq $length); doi=$((i-1))charac="${string_to_change:i:1}"if [ "$charac" != " " ] && [ "$charac" != "'" ] && [ "$charac" != """ ]; then #Here if the char is not" ", " ' ", or " "...

linux – 来自bash one liner的奇怪输出【代码】

在学习bash的过程中,我经常调整现有的东西并看到它的输出.~$for i in {1..19}; do echo "Everything in UNIX is a file."; sleep 1; done我有这个,出于好奇,我将上面的内容调整为以下内容: – ~$for i in {1..19 * 2}; do echo "Everything in UNIX is a file."; echo "The value of i is ${i}"; sleep 1; done现在让我惊讶的是我开始得到以下输出: – Everything in UNIX is a file. The value of i is OneDrive Everything in...

linux – 如何在Bash中执行并行“for”循环?【代码】

我一直在尝试并行化以下脚本,特别是for循环.我怎样才能做到这一点?#!/bin/bash for i in `cat /root/vms`; do/usr/bin/sshpass -p 'test' /usr/bin/ssh -o StrictHostKeyChecking=no -l testuser $i -t 'echo test | sudo -S yum update -y' done解决方法:更换/usr/bin/sshpass ...同/usr/bin/sshpass ... &

linux – 在bash中同时从两个文件中读取它们可能缺少尾随换行符【代码】

我有两个文本文件,我试图逐行逐行阅读.这些文件不一定具有相同的行数,并且当脚本到达任一文件的末尾时,脚本应该停止读取.我想尽可能保持这种“纯粹”的打击.我发现这样做的大部分解决方案都表明了以下形式:while read -r f1 && read -r f2 <&3; doecho "$f1"echo "$f2" done < file1 3<file2但是,如果文件的最后一行没有换行符,则会失败. 如果我只读一个文件,我会做类似的事情:while IFS='' read -r line || [[ -n "$line" ]]; d...

linux – 为什么在bash脚本中表达式始终为true【代码】

我是shell脚本的新手,我编写了这段代码,如果第二个目录中不存在该文件,则将输入文件从目录new1复制到目录new2. 问题是第一个if表达式始终为true,并且代码始终打印“文件已成功复制”,即使该文件存在于第二个目录中也是如此. 这是我的代码:while true; doecho "enter a file name from directory new1 to copy it to directory new2 "echo "or enter ctrl+c to exit: "read inputi=0cd ~/new2 if [ -f ~/new1/$input ]; theni=1 ...

Linux bash如何在复制命令中使用通配符的结果作为文件名【代码】

我正在编写一个Linux脚本来将文件从文件夹结构复制到一个文件夹中.我想使用不同的文件夹名称作为文件名的前缀. 我当前的脚本看起来像这样.但是,我似乎无法找到一种方法来使用通配符中的文件夹名称作为文件名;for f in /usr/share/storage/*/log/myfile.log*; do cp "$f" /myhome/docs/log/myfile.log; done我现有的文件夹结构/文件如下,我希望将文件复制为;>/usr/share/storage/100/log/myfile.log --> /myhome/docs/log/100...

linux – [[]]中的Bash ==运算符太聪明了!【代码】

一个很好的例子.我想知道一组文件是否作为第一行’——‘. 所以,for file in *.txt doif [[ `head -1 "$file"` == "------" ]]thenecho "$file starts with dashes"fi done事情是,head使用换行符返回内容,但“——”没有换行符. 它为什么有效?解决方法:反引号剥离了尾随换行符.例如:foo=`echo bar` echo "<$foo>"版画<bar>即使第一个回声打印出“bar”后跟换行符.

linux – bash脚本执行日期/时间

我现在试图打开和关闭一段时间.我在Linux环境中有一个bash脚本,出于安全原因,我希望防止在上午9点到下午5点之间执行,除非给出一个标志.因此,如果我在上午9点到下午5点之间执行./script.sh,它会说“NO GO”,但如果我这样做./script.sh -force它会绕过检查.基本上确保这个人不会偶然做某事.我已经尝试了一些日期命令,但无法将这个东西包裹在我的脑海里.任何人都可以帮忙吗?解决方法:写一个函数.使用日期“%k”获取当前小时,使用(()...

在linux bash脚本中杀死一个10分钟的僵尸进程【代码】

我一直在修补yukondude的正则表达式答案但收效甚微.我正在尝试杀死超过10分钟的进程.我已经知道进程ID是什么了.我每10分钟循环一次数组,看看是否有任何挥之不去的触发器,并且需要被杀死.有人对此有任何快速的想法吗?ps -eo uid,pid,etime 3233332 | egrep ' ([0-9]+-)?([0-9]{2}:?){3}' | awk '{print $2}' | xargs -I{} kill {}解决方法:就像真正的僵尸一样,僵尸进程无法杀死 – 它们已经死了. 当父进程调用wait()以获取其退出代...

linux – 如何在bash脚本中正确地将文件名传递给其他程序?【代码】

在正确处理文件名时,应该在Bash脚本(没有Perl,Python等等)中使用什么成语来为脚本的参数中的另一个程序构建命令行? 正确地说,我的意思是处理带有空格或奇数字符的文件名,而不会无意中导致其他程序将它们作为单独的参数处理(或者,在<或>的情况下 – 如果不正确的话,如果不正确的文件名字符则有效逃脱 – 做更糟糕的事情). 这是我的意思的一个组成例子,在一个不能正确处理文件名的形式中:让我们假设这个脚本(foo)为一个命令构建一个...

linux – 从bash脚本中捕获所有输入和输出【代码】

我试图捕获我为安装nagios创建的bash脚本的所有输入和输出.我现在使用tee创建日志文件,但它只显示何时有echo命令或某些输出来自“service httpd restart”.我主要想捕获用户在日志文件中输入的输入以供将来参考.解决方法:脚本命令在程序之前运行,将捕获所有输入和输出到您指定的文件.它以ctrl-D终止.script -c yourprogram filename可以做你想要的.有关脚本,请参见手册页.