Articles of bash

不能在bash中的双括号中执行命令

为了保持一致,我试图在所有if语句中使用双括号[[]]。 但是当我要检查我想运行的命令的返回值时,我确实遇到了一个问题。 在testing几种创buildif语句的方法之后,我发现只有没有括号才能执行命令。 以下不起作用: if [[ $command ]] ; then echo "something" fi if [[ $(command) ]] ; then echo "something" fi if [[ ${command} ]] ; then echo "something" fi 上面的代码使if循环成为真,即使命令没有运行。 因为上面的代码不能使用大括号它不能使用这个: [[ $command ]] || echo "failed" 而且它不能在子shell中工作。 以下工作: if $command ; then echo "something" fi if $(command) ; then echo "something" fi […]

如何从Unixterminal的任何path运行.sh脚本?

我知道如何运行我创build的脚本。 但是,我需要通过terminal改变目录并运行我的脚本,这是一个痛苦的问题。 我需要运行到桌面的slowloris脚本,现在改变目录到桌面并运行。 然后我有另一个根; 现在将目录更改为root并运行该目录。 我的问题是: 如何通过从任何pathinput./script来运行任何shell脚本,就像我们从任何path启动Metasploit一样,通过从任何path给予msfconsole 。

如何传递存储在单个variables中的引号的命令行参数?

我想从shell脚本调用外部应用程序,但是这个shell脚本从一个variables中获取参数(来自其他脚本)。 一切都还好,直到我不必为单个参数使用双引号,而是用空格隔开单词。 这里是我的问题的简化例子(sh_param只是打印所有传递的参数): #!/bin/sh pass() { echo "Result with \$@" ./sh_param $@ echo "Result with \"\$@\"" ./sh_param "$@" echo "Result with \$*" ./sh_param $* echo "Result with \"\$*\"" ./sh_param "$*" } pass '"single param" separate params' 和结果(sh_param只是打印所有传递的参数): Result with $@ Param: "single Param: param" Param: separate Param: params Result with "$@" Param: "single param" separate […]

如何在shell脚本中获取ec2-describe-instances的标签

我想从命令ec2-describe-instances的结果中提取实例ID和标记,并且想要将结果存储在文本文件中。 结果集给出: 但是我想要标签所有者和cost.centre也被提取kindly指导我如何做到这一点

我怎么能grep,而避免“太多的参数”

我试图清理一些垃圾邮件,并遇到了一个问题。 队列中的文件数量太大,以至于我平时的命令无法处理。 这会给我一个关于太多争论的错误。 我通常这样做 grep -i user@domain.com 1US* | awk -F: '{print $1}' | xargs rm 1US *可以是1US [a-zA-Z]之间的任何值。 我唯一能做的就是运行这个可怕的装置。 它的一个文件,1USA,1USA,1USB等,通过整个字母表。 我知道他们必须成为更高效运行的一种方式。 grep -s $SPAMMER /var/mailcleaner/spool/exim_stage1/input/1USa* | awk -F: '{print $1}' | xargs rm grep -s $SPAMMER /var/mailcleaner/spool/exim_stage1/input/1USA* | awk -F: '{print $1}' | xargs rm

如何获得IPv6主机的范围?

我对IPv6协议没有多less了解,所以如果这个问题听起来很愚蠢,那么很抱歉。 当我检索我的networking中的所有IPv6地址列表时,我会得到一个名为scope的字段,如下所示: inet6 addr: 2001:470:1:82::11/64 Scope:Global inet6 addr: 2001:470:1:82::10/64 Scope:Global inet6 addr: 2001:470:1:82::13/64 Scope:Global inet6 addr: fe80::21d:9ff:fe69:2c50/64 Scope:Link inet6 addr: 2001:470:1:82::12/64 Scope:Global inet6 addr: 2001:470:1:82::15/64 Scope:Global inet6 addr: 2001:470:1:82::14/64 Scope:Global inet6 addr: 2001:470:1:82::5/64 Scope:Global inet6 addr: 2001:470:1:82::17/64 Scope:Global inet6 addr: 2001:470:1:82::6/64 Scope:Global inet6 addr: 2001:470:1:82::16/64 Scope:Global inet6 addr: 2001:470:1:82::7/64 Scope:Global inet6 addr: 2001:470:1:82::19/64 Scope:Global inet6 […]

在bash shell脚本中启动dynamicvariables(variablesvariables)

我通过bash shell使用PHP CLI。 请检查在shell脚本中操作数组(由php-cli打印)以获取详细信息。 在下面的shell代码中,我能够回显我从PHP脚本获得的key对。 IFS=":" # parse php script output by read command php $PWD'/test.php' | while read -r key val; do echo $key":"$val done 以下是这个的输出 – BASE_PATH:/path/to/project/root db_host:localhost db_name:database db_user:root db_pass:root 现在我只想在while循环中启动dynamicvariables,这样我可以像$BASE_PATH那样使用它们,其值为'/path/to/project/root' , $db_host 'localhost' 我来自PHP的背景。 我想要的东西像$$key = $val的PHP

在bash中parsingCSV并分配variables

我有一个csv的格式(在Linux上工作Bash) DN , MAC , Partition , 123 , abc , xyz 321 , asd , asd 我可以使用awkparsing它 eval MAC=($(awk -F "," '{print $1}' random.csv)) 这是为CSV中的每一列完成的,因此我可以单独调用DN[2] , MAC[2]等,这些是手动的,并且可以单独parsing它们。 但是,我怎么可以逐行parsingCSV? 例如:如果我要求DN是123 ,则还应该返回相应的MAC和Partition 。

将dateredirectstderr以从Cronlogging文件

一个bash脚本从cron运行,stderr被redirect到一个日志文件,这一切工作正常。 代码是: */10 5-22 * * * /opt/scripts/sql_fetch 2>> /opt/scripts/logfile.txt 我想在日志文件的每一行添加date,这是行不通的, 代码是: */10 5-22 * * * /opt/scripts/sql_fetch 2>> ( /opt/scripts/predate.sh >> /opt/scripts/logfile.txt ) predate.sh脚本如下所示: #!/bin/bash while read line ; do echo "$(date): ${line}" done 所以第二个代码不起作用,有人可以点亮一下吗? 谢谢。

如何使用sed更改文件扩展名?

我必须做一个sed行(在Linux中也使用pipe道)来更改文件扩展名,所以我可以做一些mv *.1stextension *.2ndextension如mv *.txt *.c 。 问题是我不能使用批处理或for循环,所以我必须使用pipes和sed命令来完成所有操作。