相关疑难解决方法(0)

为什么我在shell脚本中使用双引号

我理解使用单引号和双引号.

但我不知道情况需要在脚本中加双引号.

这些陈述没有差异

$ echo hello world! $1
$ echo "hello world! $1"
Run Code Online (Sandbox Code Playgroud)

请告诉我正常和双引号之间的差异.

linux bash shell scripting

3
推荐指数
1
解决办法
1053
查看次数

Linux - 检查字符串是否在列表中

我有一个 bash 脚本,我想检查一个字符串是否在列表中。比如:string = "Hello World!", List=("foo", "bar")。蟒蛇示例:

if name in list: # Another way -> if name in ["foo", "bar"]
  # work to do
else:
  sys.exit(1)
Run Code Online (Sandbox Code Playgroud)

谢谢!

linux bash shell

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

bash中获取多个空格后的字符串

我需要从头文件中提取一些信息,并且需要从如下字符串中获取站点名称:

0008 0080 LO Institution Name                 Site Name Here
Run Code Online (Sandbox Code Playgroud)

问题是网站名称也包含空格。我想到的唯一可行的方法是将行保存为字符串,然后在一定数量的字符后将站点名称作为字符串获取,如下所示:

回声 ${行:50}

但我想要更优雅的东西。

我刚刚注意到它还删除了Institution Name和之间的多个空格Site Name

string bash

3
推荐指数
1
解决办法
6639
查看次数

在第一个空行之前插入变量中分配的文本

我有一些$f类似于以下内容的文本文件

function
%blah
%blah

%blah
code here
Run Code Online (Sandbox Code Playgroud)

我想在第一个空行之前附加以下文本:

%
%This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 
%3.0 Unported License. See notes at the end of this file for more information.
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

top=$(cat ./PATH/text.txt) 
top="${top//$'\n'/\\n}" 
sed -i.bak 's@^$@'"$top"'\\n@' $f
Run Code Online (Sandbox Code Playgroud)

其中第二行(我认为)保留文本中的新行,第三行(我认为)用文本加上新的空行替换第一个空行。

两个问题:

1-我的代码附加以下文本:

%n%本作品根据 Creative Commons Attribution-NonCommercial-ShareAlike n%3.0 Unported License 获得许可。有关详细信息,请参阅此文件末尾的注释。\n

2- 将其附加到文件末尾。

有人可以帮助我理解我的代码的问题吗?

bash sed

3
推荐指数
1
解决办法
1145
查看次数

从bash中的文件中读取星号字符(*)

我从.txt文件中获取行:Say Input.txt

a
*
b
Run Code Online (Sandbox Code Playgroud)

然后我正在阅读它:

#!/bin/bash
file=$1

ans=0
while  read -r line || [[ -n "$line" ]]
do
echo $line
done < $file # passing the file
Run Code Online (Sandbox Code Playgroud)

为此我得到以下输出

a
test main.py sic.sh
b
Run Code Online (Sandbox Code Playgroud)

显示我的目录的文件而不是*

我想根据*char来做一些决定,我需要检测/读取*?

bash

3
推荐指数
1
解决办法
217
查看次数

使用grep命令,但仅用于文件的最后几行吗?

如何仅对文件的“尾部”执行grep?

我正在尝试运行以下命令:

grep 'TEST COMPLETE' -L *.log
Run Code Online (Sandbox Code Playgroud)

TEST COMPLETE出现在最后几行中,此命令列出了文件夹中尚未完成测试的所有文件(由于-L)。日志很大,但是grep非常慢。

另一方面,我可以在尾部使用grep。grep几乎是即时的:

tail *.log | grep 'TEST COMPLETE'
Run Code Online (Sandbox Code Playgroud)

但是我不能使用-lor -L参数,因为我现在正在抓取管道输入而不是文件。因此,使用list files参数运行它:

tail *.log | grep 'TEST COMPLETE' -L
Run Code Online (Sandbox Code Playgroud)

只会输出: (standard input)

有什么办法可以让我grep搜索最后10行或类似内容吗?

bash shell grep tail

3
推荐指数
1
解决办法
225
查看次数

引用包含引号并在 Bash 中作为变量给出的文件名

假设我有一个变量目录路径DIR,我想列出该目录。如果我只关心路径中的空格,那么我可以这样做

ls "$DIR"
Run Code Online (Sandbox Code Playgroud)

如果我想在目录路径中也支持单引号和双引号以及其他奇怪的东西,我应该写什么?例子:

DIR="/Users/Mick O'Neil (the \"Terminator\")/Desktop"
echo $DIR # prints /Users/Mick O'Neil (the "Terminator")/Desktop
ls <what should I write here?>
Run Code Online (Sandbox Code Playgroud)

linux macos bash command-line

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

测试是否有任何文件超过7天

我有一个脚本可以找到文件夹中的文件,如果它们超过7天,则删除它们.但是,我有一点问题.

#!/bin/bash
BACKUPDIR=/home/vagrant/script/aerospike_backups
TIMESTAMP=$(date +%Y-%m-%d)
LOGPATH=/tmp/logs.txt
ADMINACC=email@example.com
EMEIL=rybka@gl.com
#Let's check existing backups, and if it's older than 7 days delete
find_old () {
     if [ -z $(find $BACKUPDIR -mtime +7 -print ) ]
       then
            return 10
              else
find $BACKUPDIR -mtime +7 -delete && echo "Backups deleted at $HOSTNAME on $TIMESTAMP" >  $LOGPATH

fi
} 
Run Code Online (Sandbox Code Playgroud)

如果我从终端使用./scriptname执行带有$ BACKUPDIR的脚本,那么输入echo $?shell按预期输出10个代码,因为没有7天的文件或根本没有文件.

但是在我添加更多如果条件之后

if [[ $(find_old | echo $?) -gt 0 ]]
then
echo "Script return error code"
else
echo "all is ok"
Run Code Online (Sandbox Code Playgroud)

脚本给了我输出all …

bash find

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

使用循环变量名重命名文件

我正在尝试下载一堆文件,并在我去的时候重命名它们.下载部分工作正常,但我不能让它重命名文件.这是我正在使用的脚本:

COUNTER=0
for (( i = 696; i <= 773; i++ ))
  do
  fastq-dump --split-3 --accession SRR546$i
mv SRR546"$i"_1 ./"$COUNTER"mVD_SRR546$i_1
mv SRR546"$i"_2 ./"$COUNTER"mVD_SRR546$i_2
gzip *.fastq

COUNTER=$[COUNTER + 1]
done
Run Code Online (Sandbox Code Playgroud)

这将正确下载文件SRR546696,SRR546697等,但不会重命名它们.

我也试过用:

rename 's/SRR/"$COUNTER"mVD_SRR/' *.fastq
Run Code Online (Sandbox Code Playgroud)

但这也没有做任何事.

bash loops rename

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

为什么 shell 脚本中的“读取”命令缺少初始字符?

我有以下 shell 脚本,除了第一行之外,它在每一行中都缺少一些初始字符(到目前为止,在我的观察中它缺少最初的几个字符)。

只有当我使用ffmpeg命令时才会发生这种情况。否则,它很好。但是此命令执行此脚本中的实际任务。

为什么会这样,解决方法是什么?

#!/bin/bash

while read line; do
    printf "%s\n" "$line" 
    ifile=$line
    printf "%s\n" "$ifile" 
    ofile=abc_$line
    printf "%s\n" "$ofile" 

    ############### Problem is the following command: ##########
    ffmpeg -y -i $ifile -c:v libx264rgb -b:v 512k -bf 0 -pix_fmt rgb24  -r 25 -strict -2 $ofile
    ##########rest is fine##########

    echo $ifile
done < file_list
Run Code Online (Sandbox Code Playgroud)

linux bash shell ubuntu ffmpeg

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

标签 统计

bash ×10

linux ×4

shell ×4

command-line ×1

ffmpeg ×1

find ×1

grep ×1

loops ×1

macos ×1

rename ×1

scripting ×1

sed ×1

string ×1

tail ×1

ubuntu ×1