小编3ks*_*stc的帖子

有没有办法用 bash 读取数组的最后一个元素?

如果我有一个包含 5 个元素的数组,例如:

[a][b][c][d][e]
Run Code Online (Sandbox Code Playgroud)

使用echo ${myarray[4]}我可以看到它包含什么。

但是如果我不知道给定数组中的元素数量怎么办?有没有办法读取未知长度数组的最后一个元素?即任何数组从右到左读取的第一个元素?

我想知道如何在 bash 中做到这一点。

bash array

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

在引导/启动期间运行脚本;init.d 与 cron @reboot

我目前正在尝试了解在系统启动/引导时运行脚本的init.dcron 和 cron之间的区别@reboot。

使用的@reboot(这种方法中提到的这个论坛由hs.chandra)是一些什么比较简单,通过简单地进入crontab -e并创建一个@reboot /some_directory/to_your/script/your_script.txt,然后your_script.txt,应在每次系统启动时执行。的深入解释@reboot是here

或者通过嵌入/etc/init.d/your_script.txt到脚本的第二行,即:

#!/bin/bash
# /etc/init.d/your_script.txt
Run Code Online (Sandbox Code Playgroud)

您可以运行,chmod +x /etc/init.d/your_script.txt并且your_script.txt每次系统启动时也应该运行。

Q1:两者的主要区别是什么?
Q2:哪个更健壮?
Q3:两者中是否有更好的一个?
Q4:这是嵌入脚本以在启动期间运行的正确方法吗?

我将合并一个 bash .sh 文件以在启动期间运行。

startup scripting cron init-script sysvinit

55
推荐指数
2
解决办法
14万
查看次数

邮件:无法发送消息:进程以非零状态退出

我有一个 cronjob 工作了大约两周,没有任何问题。然后昨晚我检查了我没有收到我通常收到的电子邮件。我去终端尝试给自己发一封电子邮件,我收到以下错误:

邮件:无法发送消息:进程以非零状态退出

我的 ssmtp cfg 文件没有改变任何东西。它只是停止工作,当我检查并重新检查所有内容时,代码,ssmtp,一切都很完美。

我每天通过 cronjob 发送两次电子邮件。crontab 也没有受到干扰。我真的不知道为什么它会停止工作。

系统通过 gmail 发送电子邮件 - 我已经进入 gmail 帐户并发送了测试电子邮件,它们的发送和接收没有任何问题。

此外,我检查了整个谷歌、论坛、网站,我没有看到任何错误。这是有道理的,因为 24 小时前一切正常,现在它刚刚停止。

问:有没有什么方法可以诊断和排除如何解决这样的问题?

cron email ssmtp

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

如何从字符串前面“删除”/删除字符?

我有一个想要操作的字符串。字符串是H08W2345678我如何能够操作它以便输出只是W2345678?

同样,如果我想删除最后 4 个字符H08W2345678以便我知道我将H08W234如何执行此操作?

shell bash sed text-processing

23
推荐指数
3
解决办法
6万
查看次数

如何找到交换 uuid

我正在设置突袭。sda在安装过程中使用,我刚才复制的分区表sda来sdb像这样:

$ sudo sfdisk -dL /dev/sda > partition_table_sda
$ sudo sfdisk /dev/sdb < partition_table_sda
Run Code Online (Sandbox Code Playgroud)

但是我注意到sda交换空间有一个 uuid,但sdb没有:

$ sudo blkid
/dev/sda5: UUID="vvvvvvvv-wwww-xxxx-yyyy-zzzzzzzzzzzz" TYPE="swap" 
/dev/sda1: UUID="vvvvvvvv-wwww-xxxx-yyyy-zzzzzzzzzzzz" TYPE="ext4" 
/dev/sdb1: UUID="vvvvvvvv-wwww-xxxx-yyyy-zzzzzzzzzzzz" TYPE="ext4"
Run Code Online (Sandbox Code Playgroud)

分区看起来是正确的,只是缺少 uuid:

$ sudo fdisk -l

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): …
Run Code Online (Sandbox Code Playgroud)

partition swap uuid

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

从 CSV 文件中删除重复条目

我有一个 [csv] 文件,其中重复打印了重复数据,即打印了两次相同的数据。我试过使用sort 的 uniq bysort myfile.csv | uniq -u但是没有变化myfile.csv,我也试过sudo sort myfile.csv | uniq -u但没有区别。

所以目前我的 csv 文件看起来像这样

a
a
a
b
b
c
c
c
c
c
Run Code Online (Sandbox Code Playgroud)

我想看起来像

a
b
c
Run Code Online (Sandbox Code Playgroud)

text-processing files

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

如何读取破折号文件

除了使用分隔符之外,如何从终端读取破折号文件 ./

例如阅读 a- file我们可以通过以下方式阅读它

cat ./-file_name

问:有没有其他方法可以达到同样的目的?

bash cat

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

如何只读取文件的倒数第二行

我有一个客户端可以myfile.csv任意更新/写入。

我已经编写了以下代码,但省略了 MySQL 代码段:

while true
do
  awk_variables_value_array=`tail -n2 myfile.csv | awk -F, '$7 == "status" {print $4, $5, $10 }'`
  var1=${awk_variables_value_array[0]}
  var2=${awk_variables_value_array[1]}
  var3=${awk_variables_value_array[2]}

  if[ "var3" -gt "0" ]
  --MYSQL SNIPPET IS--
  fi
done
Run Code Online (Sandbox Code Playgroud)

问: tail -n2读取最后两行,我该如何更改它,使其成为倒数第二行

文件:

其中n是文件的最后一行

line 1
line 2
line 3
line 4
....
line n-2
line n-1
line n
Run Code Online (Sandbox Code Playgroud)

当前输出产量:

line n-1
line n 
Run Code Online (Sandbox Code Playgroud)

我希望它的输出是:

line n-1
Run Code Online (Sandbox Code Playgroud)

awk text-processing

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

如何防止 SMTPUTF8 邮件被退回

将 postfix 更新到 3.0 后,主题中带有 UTF-8 字符的电子邮件卡在队列中,并出现以下错误:

SMTPUTF8 是必需的,但主机 mail.example.com [1.2.3.4] 未提供

接收服务器(此处称为 mail.example.com)是后缀 2.10.1,不支持 SMTPUTF8

我如何获得 postfix 来发送这些电子邮件?我可以更改 postfix 中的某些选项,以便像更新前那样发送它吗?

从我目前的选择来看,有趣的似乎是:

compatibility_level = 2
smtputf8_autodetect_classes = sendmail, verify
smtputf8_enable = ${{$compatibility_level} < {1} ? {no} : {yes}}
strict_smtputf8 = no
Run Code Online (Sandbox Code Playgroud)

我认为所有这些设置都是 3.0 中的默认设置

email postfix

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

如何找到特定的“字符串”并打印出整行?

我有一个名为的文件,myfile.csv其中包含以下内容:

 abc:123:myname:1231
 def:423324:arbitrary:value:string
 StackExchange:Unix:Linux
Run Code Online (Sandbox Code Playgroud)

从我运行的终端 ./myscript.sh def

内容myscript.sh为:

#!/bin/bash
key_word_I_am_looking_for=$1
my_variable=`cat myfile.csv | awk -F: -v keyword="$key_word_I_am_looking_for" '( $1 == keyword )' END{print "$@" }'`
echo "$my_variable"
Run Code Online (Sandbox Code Playgroud)

我希望代码def在myfile.csvieabc或StackExchange. 一旦找到,我希望它在没有分隔符的情况下取出整行并将其放入my_variable变量中,并将其回显到终端(因此输出看起来像:def 423324 arbitrary value string何时./myscript.sh def进入终端。./myscript.sh StackExchange输出时StackExchange Unix Linux) .

我哪里错了?有替代方案吗?

awk shell-script text-processing

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