标签: bash4

如何在Bash中迭代关联数组

基于Bash脚本中的关联数组,我需要迭代它以获取键和值.

#!/bin/bash

declare -A array
array[foo]=bar
array[bar]=foo
Run Code Online (Sandbox Code Playgroud)

我实际上不明白如何在使用for-in循环时获取密钥.

bash associative-array key-value bash4

319
推荐指数
4
解决办法
17万
查看次数

如何使用BASH编写多行配置文件,并在多行上使用变量?

如何在myconfig.conf使用BASH 调用的文件中编写多行?

#!/bin/bash
kernel="2.6.39";
distro="xyz";

echo <<< EOL
line 1, ${kernel}
line 2,
line 3, ${distro}
line 4
line ...
EOL >> /etc/myconfig.conf;
cat /etc/myconfig.conf;
Run Code Online (Sandbox Code Playgroud)

linux bash bash4

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

qstat和长工作名称

我怎样才能qstat给我完整的工作名称?

我知道qstat -r提供有关任务的详细信息,但它太多了,并且包含了资源要求.

qstat -r输出是这样的:

 131806 0.25001 tumor_foca ajalali      qw    09/29/2014 15:49:41                                    1 2-100:1
       Full jobname:     tumor_focality-TCGA-THCA-ratboost_linear_svc
       Hard Resources:   distribution=wheezy (0.000000)
                         h_rt=72000 (0.000000)
                         mem_free=15G (0.000000)
                         h_vmem=15G (0.000000)
                         h_stack=256M (0.000000)
       Soft Resources:   
 131807 0.25001 vital_stat ajalali      qw    09/29/2014 15:49:41                                    1 2-100:1
       Full jobname:     vital_status-TCGA-LGG-ratboost_linear_svc
       Hard Resources:   distribution=wheezy (0.000000)
                         h_rt=72000 (0.000000)
                         mem_free=15G (0.000000)
                         h_vmem=15G (0.000000)
                         h_stack=256M (0.000000)
       Soft Resources:   
Run Code Online (Sandbox Code Playgroud)

现在我唯一的选择就是根据grep需要输出:

$ qstat -r | grep "Full jobname" -B1
--
 131806 0.25001 tumor_foca ajalali      qw …
Run Code Online (Sandbox Code Playgroud)

linux bash4 sungridengine

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

我应该使用什么方法在bash脚本中使用'printf'将错误消息写入'stderr'?

我想将脚本printf中的a 的输出bash指向stderr而不是stdout.

不是要求重定向stderrstdout从哪里重定向到当前路由.我只是希望能够将输出从a发送printfstderr而不是默认值stdout.

我进行了一些实验,发现如下例所示,附加1>&2printf我想做的事情.但是,我没有使用bash的经验.所以我的主要问题是,是否有" 更好 "的方法来做到这一点bash

通过" 更好 "我的意思是有另一种方法来做这个更常用,更传统,或更惯用?一个更有经验的bash程序员将如何做到这一点?

#!/bin/bash
printf "{%s}   This should go to stderr.\n" "$(date)" 1>&2 
printf "[(%s)] This should go to stdout.\n" "$(date)" 
Run Code Online (Sandbox Code Playgroud)

我还有一个次要问题.我问的不是因为我需要知道,而是因为我只是好奇并希望更好地了解正在发生的事情.

看来上面只有在shell脚本中运行时才会起作用.当我从命令行尝试它时似乎不起作用.

这是我的意思的一个例子.

irrational@VBx64:~$ printf "{%s} Sent to stderr.\n" "$(date)" 1>&2 2> errors.txt
{Sat Jun  9 14:08:46 EDT 2012} …
Run Code Online (Sandbox Code Playgroud)

bash stderr io-redirection bash4

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

如何在我的Android中运行BASH脚本?

我的相同BASH脚本在Fedora/CentOS中运行.

但我正在测试一个Android eee pad transformer. 在此输入图像描述

我有终端访问权限,我写了一个小测试脚本.但它无法正常工作,我该如何解决?我究竟做错了什么?

/data/data/berserker.android.apps.sshdroid/home $ cat test.sh 
#!/bin/bash
var=`ifconfig -a`;
echo $var;

/data/data/berserker.android.apps.sshdroid/home $ chmod +x test.sh 
/data/data/berserker.android.apps.sshdroid/home $ ./test.sh 
sh: ./test.sh: not found
/data/data/berserker.android.apps.sshdroid/home $ uname -a
Linux localhost 2.6.36.3-00004-g069b8b5 #1 SMP PREEMPT Wed May 11 22:14:22 CST 2011 armv7l GNU/Linux

/data/data/berserker.android.apps.sshdroid/home $ bash ./test.sh 
sh: bash: Permission denied

/data/data/berserker.android.apps.sshdroid/home $ ls -l /bin/bash
ls: /bin/bash: No such file or directory

/data/data/berserker.android.apps.sshdroid/home $ find / -name "bash"
find: /config: Permission denied
lots more.......
find: …
Run Code Online (Sandbox Code Playgroud)

linux bash android fedora bash4

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

Bash RegEx用于检查用户输入的浮点数

我对bash编程比较陌生,我目前正在创建一个简单的计算器.

它需要使用浮点数并检查它们是否如此.

我有一个checkNumbers函数:

function checkNumber {

    regExp=[0-9]

    if [ $testNo =~ $regExp ]
    then
        echo "That is a number!"
        let check=1
    else
        echo "Damn! Not A Number!"
    fi
}
Run Code Online (Sandbox Code Playgroud)

我让用户输入这样的数字:

while [ $check -eq 0]
do
    echo "Please enter a number
    read testNo
    echo ""
    checkNumber
done
Run Code Online (Sandbox Code Playgroud)

这不起作用,我得到这个错误:

./calculator.sh:39行:[:=〜:二元运算符预期

第39行是:

if [ $testNo =~ $regExp ] 
Run Code Online (Sandbox Code Playgroud)

我尝试了很多正则表达式,如:

^*[0-9]*$
Run Code Online (Sandbox Code Playgroud)

^*[0-9]\.[0.9]*$
Run Code Online (Sandbox Code Playgroud)

等等

另外,我已经结合其他方式执行检查:

case $testNo
in
    ^*[0-9]*$) echo "That is a number!";;
    *) echo "Error! Not a number!";;
esac
Run Code Online (Sandbox Code Playgroud)

if …
Run Code Online (Sandbox Code Playgroud)

regex bash expression bash4

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

无法在Bash 4中启用globstar

我把以下内容写入我的.bashrc失败了

shopt -s globstar
Run Code Online (Sandbox Code Playgroud)

我正在尝试测试命令

ls **/*.c
Run Code Online (Sandbox Code Playgroud)

并通过比较它

ls */*/*.c
Run Code Online (Sandbox Code Playgroud)

如何在Bash 4中启用globstar?

bash bash4 shopt

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

简单的Bash和RegEx问题

我无法在bash 4.1中使用正则表达式来正确匹配模式.我已经阅读了有关引号与引号差异的一些信息,但我不认为这是我的问题.

我的目标是检查并确保脚本提供有效的ID.在这种情况下,有效ID是9位数的字符串.据我所知,正则表达式是\ d {9}.鉴于这是我要检查的代码片段:

id=$1       
if [[ $id =~ \d{9} ]]; then
     echo "This is a vaild ID"
else
     echo "This is not a vaild ID"
fi
Run Code Online (Sandbox Code Playgroud)

然后调用脚本:

 ./script 987654321
Run Code Online (Sandbox Code Playgroud)

显而易见的是我错过了什么?

regex bash bash4

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

在变量中放置多行输出

我正在用bash编写一个脚本,我希望它能够执行命令并分别处理每一行.例如:

LINES=$(df)
echo $LINES
Run Code Online (Sandbox Code Playgroud)

它将返回所有输出转换带空格的新行.

例:

如果输出应该是:

1
2
3
Run Code Online (Sandbox Code Playgroud)

然后我会得到

1 2 3
Run Code Online (Sandbox Code Playgroud)

如何将命令的输出放入变量中,使新行仍然是新行,这样当我打印变量时,我会获得正确的输出?

bash bash4

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

每次运行 script.sh 并将输出保存到文件时,如何记录 script.sh 中的错误?

如何将运行脚本时的错误输出保存到文件中?我的代码如下,但代码不会跟踪错误并将错误保存到 test.log14。有人能给我提示一下我的代码中可能有什么问题吗?

 LOGFILE=/usr/local/etc/backups/test14.log

 "$(date "+%m%d%Y %T") : Starting work" >> $LOGFILE 2>&1
Run Code Online (Sandbox Code Playgroud)

bash bash4

7
推荐指数
2
解决办法
4万
查看次数