几天前,我就开始学习如何在shell中编写脚本。如何使脚本thaht获得两个参数(文件名和某个目录),如果参数不好,我想发出错误警报,如果它们是正确的,我希望在给定目录中复制文件。到目前为止我做了这个:
#!/bin/bash
if [ -d $1 ] ; then
???
done
else
echo $1 NOT DIRECTORY
exit 1
fi
另外,我做了一个检查文件的部分。怎么把这些放在一起?
#!/bin/bash
if [ $# -ne 1 ]
then
echo "Use- $0 file"
exit 1
fi
if [ -f $1 ]
the
我正在尝试创建一个对多个错误源具有健壮性的snakemake流水线。我想在我的管道中调用一个bash脚本。提醒用户注意问题的一个标准过程是在bash脚本的开头使用以下内容:
#!/bin/bash
set -e
set -u
set -o pipefail
当使用管道将std重定向出时,pipefail会检查错误。我的脚本中有以下几行简单的代码
# Read the first argument
input=$1
less $input | head -10
当我在终端中直接使用运行我的脚本时
bash script.sh input
它运行得很好,没有检测到错误。
然后,我希望在如下规则
具有以下bash脚本:
#!/bin/bash
set -e
function foo() {
# commands that might fails and I want to exit my script
...
echo "result I need as output"
}
my_var=$(foo)
echo "I don't want this if there is an error inside foo"
使用set -e (在bash 4.4.19中)似乎不适用于子still,即仍然在执行最后一个echo命令)。如果
根据的说法,使用set -e内置应该足以让bash脚本在第一个错误时退出。然而,下面的脚本:
#!/usr/bin/env bash
set -e
echo "a"
echo "b"
echo "about to fail" && /bin/false && echo "foo"
echo "c"
echo "d"
指纹:
$ ./foo.sh
a
b
about to fail
c
d
删除echo "foo" 会停止脚本,但为什么呢?
似乎不知何故,我对bash的了解并不是很好,因为这么多年后我发现了一些奇怪的东西:
#!/bin/bash
set -e
# so we expect to exit with error code on first failure
false || true
echo "ok, expected to reach this place"
false && true
echo "why am I here?"
现在,我之所以这样问,是因为我发现为什么尝试在bash脚本中使用gerrit cherry pick代码片段,并且令我惊讶的是,当第一
我在bash中运行命令如下:
cd path &&
service service1 stop &&
(run some scripts) &&
service service1 start &&
service service2 restart
是否有任何工具在没有"&&“的情况下运行命令,就像在那里一样?现在我只是在文本编辑器中添加了"&&“和替换函数,我知道我可以编写简单的脚本来自动完成这个任务,但是如果回购中有这样的工具,那就太好了。
我有一个包含shift命令的bash脚本。
它在bash中运行正常,但在zsh环境中,shift命令似乎不同。
zsh
$ shift
shift: shift count must be <= $#
bash
$ shift
# OK here
shift命令与zsh和bash不兼容吗?如何使脚本在zsh中运行
昨天刚刚开始查看bash脚本,并希望为工作编写一个脚本,在其中,我在网络上ping不同的地址,并使用ssh键登录并关闭mikrotiks/junipers/计算机。我想出了这个方法,它似乎适用于“mikrotik”数组,但不适用于“other”elif语句。我只是通过将IP地址从MikroTik数组更改为“other”数组来触发elif来测试这一点,但它似乎什么也没做。直接进入其他语句。
这是我的第一个正确的bash脚本之一,并使用其他示例组装了这个脚本,由于某种原因被困在这里。
#!/bin/bash
#first array to make the script turn off the
我的脚本调用一个外部命令(例如,readlink),它将:
在成功时将有用的字符串写入它的stdout,即…
在失败时返回非零退出状态
我知道如何单独处理,例如捕获我可以使用的标准输出
MY_VAR=$(readlink /)
或者检查我可以使用的结果:
if readlink /tmp; then
echo "Success"
fi
但是,是否有一种干净/清晰的方法同时做到这两种方式呢?我不确定以下几点是否有效:
if MY_VAL=`readlink "$MY_ARG"`; then
echo "Value is ${M