相关疑难解决方法(0)

如何在Bash脚本中迭代参数

我有一个复杂的命令,我想制作一个shell/bash脚本.我可以$1轻松地写出来:

foo $1 args -o $1.ext
Run Code Online (Sandbox Code Playgroud)

我希望能够将多个输入名称传递给脚本.什么是正确的方法呢?

当然,我想处理其中包含空格的文件名.

bash command-line

838
推荐指数
8
解决办法
58万
查看次数

何时在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万
查看次数

用qsub启动的shell脚本的参数

如何参数化在网格上执行的shell脚本(以qsub开头)?我有一个shell脚本,我使用getopts来读取参数.

当我启动(qsub script.sh -r firstparam -s secondparam ..)这个带有qsub的工作脚本时,我收到错误消息,

qsub:无效选项 - s

qsub:非法-r值

正如qsub认为参数是为自己的.但我还没有找到任何解决方案.

谢谢

linux shell grid-computing qsub

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

$ var和$ {var}之间有什么区别

我看到一些像这样的代码

  SERIAL_NO="121"
  if [ -z "${SERIAL_NO}" ]; then
     echo -e "ERROR: serial number of the device is not provided!"
     exit 1
  else
Run Code Online (Sandbox Code Playgroud)

这里使用$ {SERIAL_NO}来获取SERIAL_NO变量.我想知道$ var和$ {var}之间的区别,以及为什么在这里使用$ {var}.

谢谢

shell

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

Perl%{$ var} vs%$ var

%{$var}和之间有什么区别%$var?我试过这段代码,但是有错误:

每个引用都是test.pl第21行的实验.每个引用的参数类型必须是test.pl第21行的非反射hashref或arrayref.

use feature 'say';

%HoH = (
    1 => {
        husband   => "fred",
        pal       => "barney",
    },
    2 => {
        husband   => "george",
        wife      => "jane",
        "his boy" => "elroy",
    },
    3 => {
        husband   => "homer",
        wife      => "marge",
        kid       => "bart",
    },
);

for ($i = 1; $i <= 3; $i++) {
    while ( ($family, $roles) = each %$HoH{$i} ) {
        say "$family: $roles";
    }
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码运行正常:

use feature 'say';

%HoH = (
    1 …
Run Code Online (Sandbox Code Playgroud)

perl hash dereference

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

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

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

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
查看次数

Bash 脚本不评估文件名中的变量

我有一个 bash 脚本,它创建了我的文件夹的备份。它应该使用版本号命名 tar gz 文件,但它没有:

#!/bin/bash

ver='1.2.3'
tar czf $ver_myfolder.tar.gz .
Run Code Online (Sandbox Code Playgroud)

预期输出:

1.2.3_myfolder.tar.gz

实际输出:

_myfolder.tar.gz

如果我像这样附加变量:

#!/bin/bash

ver='1.2.3'
tar czf myfolder-$ver.tar.gz .
Run Code Online (Sandbox Code Playgroud)

有用

linux bash

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

标签 统计

bash ×4

linux ×3

shell ×3

command-line ×1

dereference ×1

grid-computing ×1

hash ×1

loops ×1

perl ×1

qsub ×1

quotes ×1

rename ×1

unix ×1