小编dev*_*ull的帖子

如何在bash脚本中迭代json

我有如下的json,我需要在bash脚本中只获取上面json的邮件

value = {"count":5,"users":[{"username":"asa","name":"asa Tran","mail":"asa@xyz.com"},{"username": "qq","name":"qq Morris","mail":"qq@xyz.com"},{"username":"qwe","name":"qwe Org","mail":"qwe @ xyz.com"}]}

输出可以是

mail=asa@xyz.com,qq@xyz.com,qwe@xyz.com
Run Code Online (Sandbox Code Playgroud)

以上所有内容都需要在bash脚本(.sh)中完成

我已经尝试过使用数组迭代但没有用

for key in "${!value[@]}"
do
        #echo "key = $key"
        echo "value = ${value[$key]}"
done
Run Code Online (Sandbox Code Playgroud)

即使我已尝试使用数组转换

alias json-decode ="php -r'print_r(json_decode(file_get_contents(\"php:// stdin \"),1));'"value = $(curl --user $ credentials -k $ endPoint | json-解码)

仍然我无法获得具体的输出.

bash json

6
推荐指数
2
解决办法
1万
查看次数

如何在执行 shell 脚本 Linux 时关闭 echo

这是我正在做的一件简单的事情

 echo "please enter a command"
 read x
 $x
 checkexitstatus()
 {...}
Run Code Online (Sandbox Code Playgroud)

checkexit status 是在其他地方创建的 ifloop 只是为了检查退出状态

我想知道的是,当我运行 $x 时,它不会显示在屏幕上,我想知道是否可以不将输出重定向到文件

linux bash shell echo

6
推荐指数
3
解决办法
5万
查看次数

Bash - $ PATH和$ {PATH}

使用环境变量(如PATH)作为$ PATH或$ {PATH}有什么区别?

bash shell terminal environment-variables

5
推荐指数
2
解决办法
2050
查看次数

将mysql添加到我的.bashrc路径中

好吧,也许我正在做一些非常愚蠢的事情.

我在OSX 10.6.1上.

我想在我的路径中添加mysql,所以我将以下内容添加到我的.bashrc中

PATH = ${PATH}:/usr/local/mysql/bin
export PATH
Run Code Online (Sandbox Code Playgroud)

在运行终端时,它不起作用,我希望,因为.bash_profile目前没有加载.bashrc.

但如果我手动输入bash,我会收到以下错误

bash: PATH: command not found
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

macos bash path

5
推荐指数
1
解决办法
7143
查看次数

在Linux Mint中编译C程序时出错

我在编译一个简单的C程序时遇到错误.

#include<stdio.h>
void main()
{
      int i=5;
printf("I value is %d",i);
}
Run Code Online (Sandbox Code Playgroud)

错误是......

/usr/local/bin/ld: this linker was not configured to use sysroots
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我的gcc版本是..

gcc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
Copyright (C) 2012 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)

谁能知道我的问题是什么?

c ubuntu gcc ld

5
推荐指数
1
解决办法
2474
查看次数

刻度计数和 jiffies 之间的区别

cat /proc/stat gives values in jiffies
cat /proc/[pid]/stat gives values in tick count.
Run Code Online (Sandbox Code Playgroud)

ticcount 和 jiffies 到底有什么区别,两者之间的转换公式是什么?

linux

5
推荐指数
1
解决办法
1888
查看次数

我如何防范“foreach:不匹配”?

我有一个如下所示的 shell 脚本:

foreach dir (i686.* amd64.*)
  # commands
end
Run Code Online (Sandbox Code Playgroud)

此脚本的问题在于,如果没有与这些名称匹配的目录,则会出现以下错误:

"foreach: No match."
Run Code Online (Sandbox Code Playgroud)

防止此错误的优雅方法是什么?

shell csh tcsh

5
推荐指数
1
解决办法
6232
查看次数

使用xmllint从XML获取节点值

我有一个名为Det.xml的xml,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
        <S:Body>
            <ns4:grtHgetRed xmlns:ns2="http://object" xmlns:ns3="http://object" xmlns:ns4="http://object">
                <RequestId>lol</RequestId>
                <MessageDateTime>54.009</MessageDateTime>
                <SenderId>UH</SenderId>
                <ReceiverId>GER</ReceiverId>
                <TrackingNumber>45</TrackingNumber>
                <ServerName>trewds</ServerName>
                <ResponseType>success</ResponseType>
                <StatusInfo>
                <Status>success</Status>
                <SystemMessage>Hagert</SystemMessage>
                <UserMessage>Hgert</UserMessage>
                <Origination>htref</Origination>
                </StatusInfo>
            </ns4:grtHgetRed>
        </S:Body>
    </S:Envelope>
Run Code Online (Sandbox Code Playgroud)

我试图从Unix shell脚本中获取它的ResponseType节点值,所以我尝试了以下内容:successxmllint

echo "cat //*[local-name()='S:Envelope'/*[local-name()='S:Body']/*[local-name()='ns4:grtHgetRed']/*[local-name()='ResponseType']" | xmllint --shell Det
.xml | sed '/^\/ >/d' | sed 's/<[^>]*.//g'
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我也没有xpath在我的unix环境中.任何人都可以告诉我这里我做错了什么吗?

unix xmllint

5
推荐指数
1
解决办法
1万
查看次数

在shell脚本中捕获hudson上的中止信号?

我们怎样才能在hudson上捕获作业的中止信号,这样我就可以在中止的情况下做一些后续步骤(我在hudson上运行一个有后台运行shell脚本的工作)?

hudson

5
推荐指数
1
解决办法
2994
查看次数

使用awk和/或sed按字母顺序对文件中的行进行排序

我有一个数百行的文件格式如下:

#blah
RewriteCond %{HTTP_HOST} www.blah.com [NC]
RewriteRule ^/xyz(|/)$ http://www.blah.com/404.html [R=301,L,NC]

#xblah
RewriteCond %{HTTP_HOST} www.blah.com [NC]
RewriteRule ^/hkf(|/)$ http://www.blah.com/404.html [R=301,L,NC]

#ablah
RewriteCond %{HTTP_HOST} www.blah.com [NC]
RewriteRule ^/abc/.*(|/)$ http://www.blah.com/404.html [R=301,L,NC]
Run Code Online (Sandbox Code Playgroud)

我想在awk/sed中创建一个脚本,使用每组文本第三行中的第二个参数对该文件进行字母顺序排列.在这个文件的情况下,它是"abc","hkf"或"xyz",可以是任何东西 - 它们是在这个apache重定向文件中创建的重定向.

我想我想做的是:

  1. 将每组三条线连接成一条线,每条线之间有一个分隔符
  2. 使用sort -k3,3对行进行排序
  3. 然后用分离的空白行重新组装3行结构
  4. 写入文件

我的预期输出看起来像这样:

#ablah
RewriteCond %{HTTP_HOST} www.blah.com [NC]
RewriteRule ^/abc/.*(|/)$ http://www.blah.com/404.html [R=301,L,NC]

#xblah
RewriteCond %{HTTP_HOST} www.blah.com [NC]
RewriteRule ^/hkf(|/)$ http://www.blah.com/404.html [R=301,L,NC]

#blah
RewriteCond %{HTTP_HOST} www.blah.com [NC]
RewriteRule ^/xyz(|/)$ http://www.blah.com/404.html [R=301,L,NC]
Run Code Online (Sandbox Code Playgroud)

这有意义吗?有一个更好的方法吗?

ps我的目的是使脚本可移植,以便它可以在这个结构的几个文件上使用.在建议解决问题的代码时,请尽可能地拼出像我这样的新职级,开始了解如何有效地解决这个问题,并能够扩展最终结果.

任何和所有的帮助非常感谢.

awk sed

5
推荐指数
2
解决办法
8054
查看次数

标签 统计

bash ×4

shell ×3

linux ×2

awk ×1

c ×1

csh ×1

echo ×1

environment-variables ×1

gcc ×1

hudson ×1

json ×1

ld ×1

macos ×1

path ×1

sed ×1

tcsh ×1

terminal ×1

ubuntu ×1

unix ×1

xmllint ×1