我正在尝试编写一个 shell 脚本来 ping 5 台主机,每 1 小时一次,如果它从这些主机中的任何一个收到任何故障,它会发送一封电子邮件警报,其中包含此失败 ping 的结果。
我正在尝试使用此脚本:
#!/bin/csh
foreach SUB (1 2 3 4 5 6 7 8 9 10 11 12 13 14)
echo $SUB
foreach VISIT (1 2 3 4 5 6 7 8)
echo $VISIT
grep 'StudyDate' -f /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VIS}/scout/001/infodump.dat
done
done
Run Code Online (Sandbox Code Playgroud)
但每次我收到此错误消息时:
1
1
SUB: Undefined variable.
Run Code Online (Sandbox Code Playgroud)
我不知道为什么。
应该是这样的0.972 / 3=0.324是这里的实际值。因此,如果 的值HDD Used在G 中,则应以 TB 为单位进行计算,然后进行除法。
# isi storagepool list -v |
awk '
/Requested Protection:/ { parity=substr($NF,length($NF)-1,1) }
/Nodes:/ { nodes=$NF }
/HDD Total/ { hdd_total=$NF }
/HDD Used/ { hdd_used=$NF }
END {
multiplier=nodes-parity
total=hdd_total/nodes*multiplier
used=hdd_used/nodes
print "parity =" parity
print "NodeNumber =" nodes
print "Total =" total "TB"
print "Effective Total volume = " total*0.8 " TB"
print "USED =" used "%"
print "Effective used=" used*multiplier*0.8 " …Run Code Online (Sandbox Code Playgroud) shell 函数“返回”其结果的典型方法是将其分配给某个全局变量。
此变量的名称是否有任何约定/最佳实践?
我想将以下命令应用于当前目录中的所有文件
clustalw -align -infile=*here goes the input filename* -outfile=*here goes the output filename*
Run Code Online (Sandbox Code Playgroud)
我还希望输出文件名与输入加上“.aln”相同。例如:
clustalw -align -infile=nexus0000.fna -outfile=nexus000.fna.aln
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助!
我有一个文件A和一个文件B。在fileA 中,我希望我的脚本找到特定的 stringA;然后,使用sed命令仅将 stringA 的一部分粘贴到文件 B 上(替换为 fileB 中特定 stringB 的一部分)。
例如。
文件A 阿什杰卡什杰德 阿吉克达杰斯德 推荐权重:0.546(这是感兴趣的字符串)
文件B 阿斯达什达 克贾什贾斯德 WGHT 0.495(这是FILE BI需要替换的部分)
我只想选择 stringA (0.546) 的文本并将 fileB 上的 0.495 替换为 0.546,因此,新的 fileB 将是:
新文件B 阿斯达什达 克贾什贾斯德 WGHT 0.546
使用 onlysed对我不起作用,因为它用同一文件中的 stringB 替换了 stringA,但我的 stringsA 和 B 来自不同的文件。此外,它们是“随机”生成的(通过程序)。
我正在开发一个 Bash 脚本,它将在全新安装后加快我的 shell。
main()
{
#
# By default we assume the terminal doesn't support colors
#
RED=""
GREEN=""
YELLOW=""
BLUE=""
BOLD=""
NORMAL=""
#
# Check if we are connected to a terminal, and that terminal
# supports colors.
#
if which tput >/dev/null 2>&1; then
ncolors=$(tput colors)
fi
#
# Set the colors if we can
#
if [ -t 1 ] && [ -n "$ncolors" ] && [ "$ncolors" -ge 8 ]; then
RED="$(tput setaf 1)"
GREEN="$(tput …Run Code Online (Sandbox Code Playgroud) 我正在使用脚本根据创建文件的年份复制一些文件,它适用于没有空格的文件,但对于有空格的文件,stats 命令有问题,例如我有这个文件: file with spaces.pdf
stat -c %y ./path/to/file\ with\ spaces.pdf|cut -d '-' -f 1
Run Code Online (Sandbox Code Playgroud)
返回年份,例如:2017
但是在脚本中使用时:
year=$(stat -c %y $pathfile | cut -d '-' -f 1)
Run Code Online (Sandbox Code Playgroud)
这似乎不是工作,如果我采取了以下输出:
echo "stat -c %y file | cut -d '-' -f 1"
Run Code Online (Sandbox Code Playgroud)
并在终端中复制它它确实有效,在所有情况下错误都是一样的,就像忽略文件名的这一部分with\ spaces.pdf::
stat: cannot stat './path/to/file\': No such file or directory
Run Code Online (Sandbox Code Playgroud)
我试过在路径中添加引号,但它似乎不起作用:
year=$(stat -c %y "$pathfile" | cut -d '-' -f 1)
Run Code Online (Sandbox Code Playgroud)
我在某处看到我需要将统计信息放在一个函数中,我这样做了:
makestats () {
$(stat -c %y $1|cut -d '-' -f 1)
}
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用,如果你能给我你的帮助,我会得到同样的错误。
我正在编写一个 bash 脚本,除其他外,它将在另一台服务器上编辑 crontab。我想出如何做到这一点的方法是:
crontab -l | sed <stuff> | crontab -
Run Code Online (Sandbox Code Playgroud)
它完成了我需要它做的事情,但我仍然不确定如何做。“crontab -”究竟是做什么的?当我从 shell 自己运行它时,它会接管 shell,直到我按下 ctl+c,但似乎什么也没做。它的唯一目的是用从 stdin 传递的任何内容覆盖 cron 内容吗?我似乎找不到任何关于它的文档。
我myVar在 bash 中有一个变量,其中包含一个长字符串,如下所示:
-rw-rw-rw- root/root 16 2018-02-12 10:03 foo_tar/baz1234_
Run Code Online (Sandbox Code Playgroud)
我想删除myVar最后一个斜杠(包括最后一个斜杠)之前的所有内容,这样myVar最终只存储baz1234_. 如何删除所有内容并将结果存储在变量中?
我遇到过处理 sed 的解决方案,但那些解决文件处理的问题,因此我的问题。