相关疑难解决方法(0)

如何从Bash脚本检查程序是否存在?

如何验证程序是否存在,以返回错误并退出或继续脚本的方式?

看起来应该很容易,但它一直在困扰我.

bash

2032
推荐指数
20
解决办法
62万
查看次数

set -e在bash脚本中的含义是什么?

我正在研究脚本在从Debian存档(.deb)文件解压缩该包之前执行的这个preinst文件的内容.

该脚本具有以下代码:

#!/bin/bash
set -e
# Automatically added by dh_installinit
if [ "$1" = install ]; then
   if [ -d /usr/share/MyApplicationName ]; then
     echo "MyApplicationName is just installed"
     return 1
   fi
   rm -Rf $HOME/.config/nautilus-actions/nautilus-actions.conf
   rm -Rf $HOME/.local/share/file-manager/actions/*
fi
# End automatically added section
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是关于这一行:

set -e
Run Code Online (Sandbox Code Playgroud)

我认为脚本的其余部分非常简单:它检查Debian/Ubuntu包管理器是否正在执行安装操作.如果是,它会检查我的应用程序是否刚刚安装在系统上.如果有,脚本将打印消息"MyApplicationName刚刚安装"并结束(return 1意味着以"错误"结束,不是吗?).

如果用户要求Debian/Ubuntu软件包系统安装我的软件包,该脚本还会删除两个目录.

这是对的还是我错过了什么?

linux bash shell sh

617
推荐指数
9
解决办法
34万
查看次数

如何测试变量是否是Bash中的数字?

我无法弄清楚如何确保传递给我的脚本的参数是否为数字.

我想做的就是这样:

test *isnumber* $1 && VAR=$1 || echo "need a number"
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

linux bash shell

543
推荐指数
21
解决办法
61万
查看次数

如果任何命令返回非零值,则中止shell脚本?

我有一个调用许多命令的Bash shell脚本.如果任何命令返回非零值,我希望shell脚本自动退出,返回值为1.

如果没有明确检查每个命令的结果,这可能吗?

例如

dosomething1
if [[ $? -ne 0 ]]; then
    exit 1
fi

dosomething2
if [[ $? -ne 0 ]]; then
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

unix linux bash shell

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

基于进程退出代码退出Shell脚本

我有一个执行许多命令的shell脚本.如果任何命令以非零退出代码退出,如何使shell脚本退出?

bash shell

372
推荐指数
8
解决办法
41万
查看次数

如何找到哪个rpm包提供我正在寻找的文件?

作为一个例子,我正在寻找一个mod_files.sh大概附带php-devel包的文件.我猜想yummod_files.shphp-devel x86_64 5.1.6-23.2.el5_3软件包安装文件,但文件似乎没有安装在我的文件系统上.

如何找出安装特定文件的软件包?我正在寻找我不一定已经在本地下载的软件包,其中可能包含我正在寻找的文件.

我正在使用CentOS 5.

centos rpm yum

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

如何在脚本本身内重定向整个shell脚本的输出?

是否可以将Bourne shell脚本的所有输出重定向到某个地方,但是脚本本身内部有shell命令?

重定向单个命令的输出很简单,但我想要更像这样的东西:

#!/bin/sh
if [ ! -t 0 ]; then
    # redirect all of my output to a file here
fi

# rest of script...
Run Code Online (Sandbox Code Playgroud)

含义:如果脚本以非交互方式运行(例如,cron),则将所有内容的输出保存到文件中.如果从shell以交互方式运行,请让输出像往常一样转到stdout.

我想为通常由FreeBSD定期实用程序运行的脚本执行此操作.它是日常运行的一部分,我通常不会每天都看到电子邮件,所以我没有发送它.但是,如果这个特定脚本中的某些内容失败,那对我来说很重要,我希望能够捕获并通过电子邮件发送这部分日常工作的输出.

更新:Joshua的回答是正确的,但我也想在整个脚本周围保存和恢复stdout和stderr,这样做:

# save stdout and stderr to file descriptors 3 and 4, then redirect them to "foo"
exec 3>&1 4>&2 >foo 2>&1

# ...

# restore stdout and stderr
exec 1>&3 2>&4
Run Code Online (Sandbox Code Playgroud)

shell

179
推荐指数
4
解决办法
16万
查看次数

150
推荐指数
5
解决办法
15万
查看次数

Bash中单方括号和双方括号之间的区别

我正在阅读bash示例,if但有些示例是用单个方括号编写的:

if [ -f $param ]
then
  #...
fi
Run Code Online (Sandbox Code Playgroud)

其他双方括号:

if [[ $? -ne 0 ]]
then
    start looking for errors in yourlog
fi
Run Code Online (Sandbox Code Playgroud)

有什么不同?

bash if-statement

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

否定bash脚本中的条件

我是bash的新手,我一直试图否定以下命令:

wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
        echo "Sorry you are Offline"
        exit 1
Run Code Online (Sandbox Code Playgroud)

如果我连接到互联网,这个if条件返回true.我希望它以相反的方式发生,但放在!任何地方似乎都不起作用.

linux bash if-statement negate

141
推荐指数
5
解决办法
15万
查看次数

标签 统计

bash ×7

shell ×6

linux ×4

if-statement ×2

centos ×1

negate ×1

rpm ×1

scripting ×1

sh ×1

special-characters ×1

unix ×1

yum ×1