标签: shell-script

如何比较shell中的两个日期?

如何在shell中比较两个日期?

这是我想如何使用它的示例,尽管它不能按原样工作:

todate=2013-07-18
cond=2013-07-15

if [ $todate -ge $cond ];
then
    break
fi                           
Run Code Online (Sandbox Code Playgroud)

我怎样才能达到预期的结果?

shell shell-script date

114
推荐指数
6
解决办法
34万
查看次数

Shell 脚本:-z 和 -n 选项与 if

我有一个 shell 脚本,其中有以下几行if [ -z "$xyz" ]if [ -n "$abc" ],但我不确定它们的目的是什么。谁能解释一下?

shell-script

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

使用 shell 检测初始化系统

这可能与检测操作系统有关,但我特别需要系统上当前使用的 init 系统。

Fedora 15 和 Ubuntu 现在使用 systemd,Ubuntu 过去使用 Upstart(很长时间默认直到 15.04),而其他人使用 System V 的变体。

我有一个应用程序,我正在编写它作为跨平台守护程序。初始化脚本是根据可以在配置时传入的参数动态生成的。

我想做的只是为他们正在使用的特定初始化系统生成脚本。这样,安装脚本可以在没有参数的情况下以 root 身份合理运行,并且守护进程可以自动“安装”。

这是我想出的:

  • 在 /bin 中搜索 systemd、upstart 等
  • 将 /proc/1/comm 与 systemd、upstart 等进行比较
  • 询问用户

这样做的最佳跨/平台方式是什么?

有点相关,我可以依赖 bash 来支持大多数 *nix 还是依赖于发行版/操作系统?

目标平台:

  • 苹果系统
  • Linux(所有发行版)
  • BSD(所有版本)
  • Solaris、Minix 和其他 *nix

shell-script init portability

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

在脚本中使用 $"dollarsign-prefixed string" 是什么意思?

我刚刚在初始化脚本中看到了这一点:

echo $"Stopping Apache"
Run Code Online (Sandbox Code Playgroud)

那个美元符号是干什么用的?

到目前为止我的研究:

我在 bash 手册中找到了这个:

引述

如果设置,$'string'并且在双引号括起来的扩展中$"string"执行${parameter}引用。默认情况下启用此选项。

...但我没有发现带$前缀和不带前缀的字符串之间有任何区别:

$ echo "I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo "I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo 'I am in ${PWD}'
I am in ${PWD}
$ echo $'I am in ${PWD}'
I am in ${PWD} …
Run Code Online (Sandbox Code Playgroud)

scripting bash shell-script quoting

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

多行 shell 脚本注释 - 这是如何工作的?

最近,我偶然发现了一种我以前从未见过的多行注释类型——这是一个脚本示例:

echo a
#
: aaa 
: ddd 
#
echo b
Run Code Online (Sandbox Code Playgroud)

这似乎有效,甚至vim语法突出显示它。这种评论风格是什么,我如何找到有关它的更多信息?

bash shell-script

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

为什么模式“command || true”有用?

我目前正在探索 Debian 软件包,并且我一直在阅读一些代码示例。例如,postinst脚本中的每一行都是一个模式。

some command || true
another command || true
Run Code Online (Sandbox Code Playgroud)

因此,如果某些命令失败,则该行返回 true,但我看不出这会如何影响程序的输出。

shell-script error-handling

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

如何将命令的输出分配给 shell 变量?

我想将表达式的结果(即命令的输出)分配给一个变量,然后对其进行操作——例如,将它与一个字符串连接起来,然后回显它。这是我所拥有的:

#!/bin/bash
cd ~/Desktop;
thefile= ls -t -U | grep -m 1 "Screen Shot";
echo "Most recent screenshot is: "$thefile;
Run Code Online (Sandbox Code Playgroud)

但是输出:

Screen Shot 2011-07-03 at 1.55.43 PM.png
Most recent screenshot is: 
Run Code Online (Sandbox Code Playgroud)

因此,它看起来没有分配给$thefile,并且在执行时正在打印。

我错过了什么?

bash io-redirection shell-script variable

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

如何以优雅的方式永远什么都不做?

我有一个程序可以生成有用的信息,stdout但也可以从stdin. 我想将其标准输出重定向到一个文件,而不在标准输入上提供任何内容。到目前为止,很好:我可以做到:

program > output
Run Code Online (Sandbox Code Playgroud)

并且不要在 tty 中做任何事情。

但是,问题是我想在后台执行此操作。如果我做:

program > output &
Run Code Online (Sandbox Code Playgroud)

程序将被挂起(“挂起(tty 输入)”)。

如果我做:

program < /dev/null > output &
Run Code Online (Sandbox Code Playgroud)

程序立即终止,因为它到达 EOF。

似乎我需要的是将program某些内容导入到无限期不执行任何操作且不读取的内容中stdin。以下方法有效:

while true; do sleep 100; done | program > output &
mkfifo fifo && cat fifo | program > output &
tail -f /dev/null | program > output &
Run Code Online (Sandbox Code Playgroud)

然而,这一切都非常难看。有是一种优雅的方式,使用标准的Unix工具,以“什么都不做,无限期”(意译man true)。我怎么能做到这一点?(我这里优雅的主要标准:没有临时文件;没有忙碌等待或定期唤醒;没有异国情调的实用程序;尽可能短。)

bash shell-script background-process stdout stdin

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

#!/bin/bash - 没有这样的文件或目录

我已经创建了一个 bash 脚本,但是当我尝试执行它时,我得到

#!/bin/bash no such file or directory
Run Code Online (Sandbox Code Playgroud)

我需要运行命令:bash script.sh让它工作。

我怎样才能解决这个问题?

bash executable shell-script shebang

94
推荐指数
4
解决办法
30万
查看次数

理解“IFS= read -r line”

我显然明白可以为内部字段分隔符变量添加值。例如:

$ IFS=blah
$ echo "$IFS"
blah
$ 
Run Code Online (Sandbox Code Playgroud)

我也明白这read -r line会将数据保存stdin到名为的变量line

$ read -r line <<< blah
$ echo "$line"
blah
$ 
Run Code Online (Sandbox Code Playgroud)

但是,命令如何分配变量值?它是否首先存储来自stdinto 变量的数据line,然后赋予lineto 的值IFS

bash shell-script

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