相关疑难解决方法(0)

检查shell脚本中是否存在目录

在shell脚本中,可以使用什么命令来检查目录是否存在?

unix shell posix

3556
推荐指数
34
解决办法
271万
查看次数

如何判断Bash中是否存在常规文件?

我使用以下脚本来查看文件是否存在:

#!/bin/bash

FILE=$1     
if [ -f $FILE ]; then
   echo "File $FILE exists."
else
   echo "File $FILE does not exist."
fi
Run Code Online (Sandbox Code Playgroud)

如果我只想检查文件是否存在,使用的语法是什么?

#!/bin/bash

FILE=$1     
if [ $FILE does not exist ]; then
   echo "File $FILE does not exist."
fi
Run Code Online (Sandbox Code Playgroud)

bash scripting file-io

3069
推荐指数
18
解决办法
241万
查看次数

如何在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中将变量设置为命令的输出?

我有一个非常简单的脚本,如下所示:

#!/bin/bash

VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'

echo $MOREF
Run Code Online (Sandbox Code Playgroud)

当我从命令行运行此脚本并将参数传递给它时,我没有得到任何输出.但是,当我运行$MOREF变量中包含的命令时,我能够获得输出.

我想知道如何获取需要在脚本中运行的命令的结果,将其保存到变量,然后在屏幕上输出该变量?

bash shell command-line

1513
推荐指数
14
解决办法
170万
查看次数

检查Bash shell脚本中是否存在输入参数

我需要检查输入参数是否存在.我有以下脚本

if [ "$1" -gt "-1" ]
  then echo hi
fi
Run Code Online (Sandbox Code Playgroud)

我明白了

[: : integer expression expected
Run Code Online (Sandbox Code Playgroud)

如何首先检查输入参数1以查看它是否存在?

bash shell

1223
推荐指数
9
解决办法
113万
查看次数

如何从Bash变量中修剪空格?

我有一个包含以下代码的shell脚本:

var=`hg st -R "$path"`
if [ -n "$var" ]; then
    echo $var
fi
Run Code Online (Sandbox Code Playgroud)

但条件代码总是执行,因为hg st始终打印至少一个换行符.

  • 是否有一种简单的方法可以从中删除空格$var(比如trim()PHP中)?

要么

  • 有没有一种标准的方法来处理这个问题?

我可以使用sedAWK,但我想有一个更优雅的解决方案来解决这个问题.

string variables bash trim

854
推荐指数
30
解决办法
124万
查看次数

Shell命令到tar目录,不包括某些文件/文件夹

是否有一个简单的shell命令/脚本支持排除某些文件/文件夹被存档?

我有一个目录需要使用子目录进行存档,该子目录包含许多我不需要备份的非常大的文件.

不完全解决方案:

tar --exclude=PATTERN命令与给定模式匹配并排除这些文件,但我需要忽略特定文件和文件夹(完整文件路径),否则可能会排除有效文件.

我还可以使用find命令创建文件列表并排除我不想存档的文件并将列表传递给tar,但这仅适用于少量文件.我有成千上万.

我开始认为唯一的解决方案是创建一个文件,其中包含要排除的文件/文件夹列表,然后使用rsync --exclude-from=file将所有文件复制到tmp目录,然后使用tar来存档该目录.

谁能想到更好/更有效的解决方案?

编辑:cma的解决方案效果很好.最重要的是--exclude='./folder' 必须在tar命令的开头.完整命令(cd首先,所以备份是相对于该目录):

cd /folder_to_backup
tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .
Run Code Online (Sandbox Code Playgroud)

linux shell tar archive

760
推荐指数
16
解决办法
82万
查看次数

什么是特殊的美元符号shell变量?

在Bash中,似乎有几个变量具有特殊的,一致意义的值.例如,

./myprogram &; echo $!
Run Code Online (Sandbox Code Playgroud)

将返回后台进程的PID myprogram.我知道其他人,比如$?我认为是目前的TTY.还有其他人吗?

bash environment-variables dollar-sign

751
推荐指数
3
解决办法
30万
查看次数

在Bash中提取子字符串

给定表单中的文件名someletters_12345_moreleters.ext,我想提取5位数并将它们放入变量中.

因此,为了强调这一点,我有一个带有x个字符的文件名,然后是一个五位数序列,两边都是一个下划线,然后是另一组x个字符.我想取5位数字并将其放入变量中.

我对可以实现的不同方式的数量非常感兴趣.

string bash shell substring

684
推荐指数
17
解决办法
114万
查看次数

如何比较Bash中'if'语句中的两个字符串变量?

我正在尝试使用Bash(使用Ubuntu)获得一个if声明:

#!/bin/bash

s1="hi"
s2="hi"

if ["$s1" == "$s2"]
then
  echo match
fi
Run Code Online (Sandbox Code Playgroud)

我尝试了各种形式的if语句,使用[["$s1" == "$s2"]],有和没有引号,使用=,==-eq,但我仍然得到以下错误:

[hi:命令未找到

我查看了各种网站和教程并复制了这些内容,但是它不起作用 - 我做错了什么?

最后,我想说是否$s1包含$s2,所以我该怎么做?

我刚刚解决了空位...:/我怎么说包含?

我试过了

if [[ "$s1" == "*$s2*" ]]
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

bash scripting if-statement

572
推荐指数
11
解决办法
102万
查看次数