相关疑难解决方法(0)

如何在Bash中的分隔符上拆分字符串?

我把这个字符串存储在一个变量中:

IN="bla@some.com;john@home.com"
Run Code Online (Sandbox Code Playgroud)

现在我想通过;分隔符拆分字符串,以便我有:

ADDR1="bla@some.com"
ADDR2="john@home.com"
Run Code Online (Sandbox Code Playgroud)

我不一定需要ADDR1ADDR2变量.如果它们是阵列的元素甚至更好.


根据以下答案的建议,我最终得到了以下内容,这就是我所追求的:

#!/usr/bin/env bash

IN="bla@some.com;john@home.com"

mails=$(echo $IN | tr ";" "\n")

for addr in $mails
do
    echo "> [$addr]"
done
Run Code Online (Sandbox Code Playgroud)

输出:

> [bla@some.com]
> [john@home.com]
Run Code Online (Sandbox Code Playgroud)

有一个涉及设置Internal_field_separator(IFS)的解决方案;.我不确定该答案发生了什么,你如何重置IFS为默认值?

RE:IFS解决方案,我试过这个并且它可以工作,我保持旧的IFS然后恢复它:

IN="bla@some.com;john@home.com"

OIFS=$IFS
IFS=';'
mails2=$IN
for x in $mails2
do
    echo "> [$x]"
done

IFS=$OIFS
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我试过的时候

mails2=($IN)
Run Code Online (Sandbox Code Playgroud)

我只是在循环打印时得到第一个字符串,没有括号围绕$IN它工作.

bash shell scripting split

1885
推荐指数
22
解决办法
204万
查看次数

什么是在Bash中ssh和运行多个命令最干净的方法?

我已经设置了ssh代理,我可以在Bash脚本中运行外部服务器上的命令,例如:

ssh blah_server "ls; pwd;"
Run Code Online (Sandbox Code Playgroud)

现在,我真正想做的是在外部服务器上运行很多长命令.将所有这些包含在引号之间会非常难看,而且我宁愿多次避免ssh'ing以避免这种情况.

那么,有没有一种方法可以用括号括起来的一个方法做到这一点?我正在寻找以下内容:

ssh blah_server (
   ls some_folder;
   ./someaction.sh;
   pwd;
)
Run Code Online (Sandbox Code Playgroud)

基本上,只要它干净,我会对任何解决方案感到满意.

编辑

为了澄清,我在谈论这是一个更大的bash脚本的一部分.其他人可能需要处理脚本,所以我想保持清洁.我不希望有一个bash脚本,其中一行看起来像:

ssh blah_server "ls some_folder; ./someaction.sh 'some params'; pwd; ./some_other_action 'other params';"
Run Code Online (Sandbox Code Playgroud)

因为它非常丑陋且难以阅读.

unix ssh bash

326
推荐指数
14
解决办法
35万
查看次数

一个如何在bash中使用getopts的例子

我想以myscript这种方式调用文件:

$ ./myscript -s 45 -p any_string
Run Code Online (Sandbox Code Playgroud)

要么

$ ./myscript -h  #should display help
$ ./myscript     #should display help
Run Code Online (Sandbox Code Playgroud)

我的要求是:

  • getopt 这里得到输入参数
  • 检查是否-s存在,如果没有返回错误
  • 检查之后的值-s是45还是90
  • 检查是否-p存在并且之后有输入字符串
  • 如果用户输入./myscript -h或只是./myscript显示帮助

我到目前为止尝试了这段代码:

#!/bin/bash
while getopts "h:s:" arg; do
  case $arg in
    h)
      echo "usage" 
      ;;
    s)
      strength=$OPTARG
      echo $strength
      ;;
  esac
done
Run Code Online (Sandbox Code Playgroud)

但是使用该代码我会收到错误.怎么用Bash和getopt

bash shell getopts

310
推荐指数
7
解决办法
44万
查看次数

如何从PEM编码的证书中确定SSL证书的到期日期?

如果我在Mac或Linux中有实际文件和Bash shell,我如何查询cert文件何时到期?假设我有csr,key,pem和chain文件,这不是一个网站,而是实际上是证书文件本身.

bash ssl openssl certificate

278
推荐指数
7
解决办法
29万
查看次数

如何将输出重定向到shell中的变量?

我有这样的剧本

genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5
Run Code Online (Sandbox Code Playgroud)

我想在变量中获取genhash生成的流.如何将其重定向到变量$hash以在条件内进行比较?

if [ $hash -ne 0 ]
  then echo KO
  exit 0
else echo -n OK
  exit 0
fi
Run Code Online (Sandbox Code Playgroud)

bash shell

186
推荐指数
6
解决办法
28万
查看次数

如何将Bash命令的输出分配给变量?

我有一个问题,将pwd命令的内容放入shell变量中,稍后我将使用它.

这是我的shell代码(循环不会停止):

#!/bin/bash
pwd= `pwd`
until [ $pwd = "/" ]
    do
        echo $pwd
        ls && cd .. && ls 
        $pwd= `pwd` 
    done
Run Code Online (Sandbox Code Playgroud)

你能发现我的错误吗?

bash shell

153
推荐指数
4
解决办法
28万
查看次数

在shell脚本中使用$()而不是反引号有什么好处?

有两种方法可以捕获命令行的输出bash:

  1. Legacy Bourne shell反手``:

     var=`command`
    
    Run Code Online (Sandbox Code Playgroud)
  2. $() 语法(据我所知,特定于Bash,或至少不受原始Bourne等非POSIX旧shell支持)

     var=$(command)
    
    Run Code Online (Sandbox Code Playgroud)

与反引号相比,使用第二种语法有什么好处吗?或两者完全相同?

syntax sh backticks

149
推荐指数
8
解决办法
6万
查看次数

在Bash中将输出分配给变量

我正在尝试将cURL的输出分配给变量,如下所示:

#!/bin/sh
$IP=`curl automation.whatismyip.com/n09230945.asp`
echo $IP
sed s/IP/$IP/ nsupdate.txt | nsupdate
Run Code Online (Sandbox Code Playgroud)

但是,当我运行脚本时,会发生以下情况:

./update.sh: 3: =[my ip address]: not found
Run Code Online (Sandbox Code Playgroud)

如何才能$IP正确输出?

bash curl

148
推荐指数
2
解决办法
19万
查看次数

何时在shell变量周围包装引号?

有人能告诉我是否应该在shell脚本中包含变量的引号?

例如,以下是正确的:

xdg-open $URL 
[ $? -eq 2 ]
Run Code Online (Sandbox Code Playgroud)

要么

xdg-open "$URL"
[ "$?" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)

如果是这样,为什么?

unix linux bash shell quotes

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

使用正则表达式在bash中搜索和替换

我见过这个例子:

hello=ho02123ware38384you443d34o3434ingtod38384day
echo ${hello//[0-9]/}
Run Code Online (Sandbox Code Playgroud)

遵循以下语法: ${variable//pattern/replacement}

不幸的是,该pattern字段似乎不支持完整的正则表达式语法(如果我使用.或者\s,例如,它尝试匹配文字字符).

如何使用完整的正则表达式语法搜索/替换字符串?

regex bash

142
推荐指数
6
解决办法
19万
查看次数

标签 统计

bash ×9

shell ×5

unix ×2

backticks ×1

certificate ×1

curl ×1

getopts ×1

linux ×1

openssl ×1

quotes ×1

regex ×1

scripting ×1

sh ×1

split ×1

ssh ×1

ssl ×1

syntax ×1