Articles of bash

在bash中,如何在一个variables中存储返回值?

我知道Linux中的一些非常基本的命令,并且正在尝试编写一些脚本。 我写了一个函数,用5位数字来计算最后两位数的总和。 该函数应该在最后2位之间连接这个结果和并返回它。 我想要返回这个值的原因是因为我将在另一个函数中使用这个值。 例如:如果我有12345,那么我的函数将计算4 + 5并返回495。 #!/bin/bash set -x echo "enter: " read input function password_formula { length=${#input} last_two=${input:length-2:length} first=`echo $last_two| sed -e 's/\(.\)/\1 /g'|awk '{print $2}'` second=`echo $last_two| sed -e 's/\(.\)/\1 /g'|awk '{print $1}'` let sum=$first+$second sum_len=${#sum} echo $second echo $sum if [ $sum -gt 9 ] then sum=${sum:1} fi value=$second$sum$first return $value […]

如何忽略差异命令的一些差异?

diff有一个选项-I regexp ,它忽略只插入或删除与给定正则expression式匹配的行的更改。 我需要一个类似于这种情况,当两行之间的变化(而不是插入或删除行)。 例如,对于给定的X和Y ,我想忽略"abXd"和"abYd"之间的所有差异。 似乎diff没有这样的能力。 有什么合适的替代diff ?

可以'find'或任何其他工具search宽度优先的文件?

有时我知道一个文件不是很深,但是一个非常密集的子目录不允许我find我想要的文件。 可以find (或任何其他工具)使用广度优先search查找文件?

在bash脚本中引发错误

我想在消息“testing用例失败!!!”的Bash脚本中引发错误。 如何在Bash中做到这一点? 例如: if [ condition ]; then raise error "Test cases failed !!!" fi

如何正确debugging一个bash脚本

我在bash脚本中使用下面的代码来追踪代码 #!/bin/bash function trace() { echo "TRACE" \ "${BASH_SOURCE[1]}:${BASH_LINENO[0]}:${FUNCNAME[1]}:" \ "$BASH_COMMAND" } set -o functrace shopt -s extdebug trap trace DEBUG # Remainder of code here exit 0 但是当我运行它,它吃我的variables。 一些线索?

Bash if else然后在一行中使用bash版本的sys.exit()

我正在运行这个bash命令: xe pbd-unplug uuid=$PBDUUID 如果结果存在 – 即如果variablesPBDUUID不为空,那么我想运行另一个命令: xe sr-forget uuid=$SRUUID 但是,如果variables是空白,那么我想打印一个错误消息 Error: No PBD. 并让脚本立即退出(类似于Python中的sys.exit() )。 有没有办法将这个结合起来呢? 另外,什么是sys.exit()的bash等价物? 其他信息/评论: 关于Dilettant的评论,是的这种方法( if [ -z ${PBDUUID} ]; then )也将工作。 我没有意识到这一点。 谢谢你。 这似乎很直观。

find命令的“exec”function可以在后台启动一个程序吗?

我想做一些事情: find . -iname "*Advanced*Linux*Program*" -exec kpdf {} & \; 可能? 其他一些可比的方法可用?

使用grep从根目录已经存在的字典中删除单词

我正在尝试写一个随机密码生成器。 我有一个单词字典,我想删除词根已经在字典中的单词,以便一个字典,看起来像: ablaze able abler ablest abloom ably 最终只会结束 ablaze able abloom ably 因为能和能够包含以前使用的能力。 我宁愿用grep来做这件事,这样我就可以更多地了解它的工作原理。 我有能力写一个程序在C或Python将做到这一点。

git post-receive checkout远程机器?

如果将以下脚本作为hooks/post-receive挂钩添加到裸仓库foo.git : #!/bin/sh GIT_WORK_TREE=/bar git checkout -f 那么无论何时有人推送到存储库,当前状态将在目录bar更新。 这需要bar和foo.git在同一台机器上。 什么是最简单的方法来修改它,以便在远程机器(如baz:/bar )上签出? 一种方法是: #!/bin/sh GIT_WORK_TREE=/tmp/bar git checkout -f rsync … /tmp/bar baz:/bar 有没有更好的办法? 也许不需要中间临时目录? (如果没有什么正确的选项传递给rsync,使得生成的目录是直接签出的?

在后台运行的命令行脚本处于停止状态

我有一个简短的PHP实用程序脚本,我只是用cli来运行它: php myscript.php 脚本始终在运行,定期执行一些任务(与问题无关)。 它不需要用户的任何input。 运行后,我通常按CTRL + Z ,然后运行bg将进程置于后台,一切正常。 如果我运行它: php myscript.php & 脚本在启动时放在后台,但也处于停止状态。 例: [1] 11513 [1]+ Stopped php myscript.php 即使运行bg在这一点上没有帮助,我必须运行fg ,然后CTRL + Z和bg再次使其工作。 这是PHP脚本: <? while(true){ echo 'hi '.time()."\n"; sleep(30); } ?> 我的问题是,我不能直接在后台运行它,因为系统停止它,我不明白为什么。 我怎样才能解决这个问题? 更新: 我做了一个bash版本的同一个脚本,它可以运行,并放在后台(运行,而不是停止 ),只要启动它在&最后( script.sh & ) script.sh: #!/bin/bash while true; do echo `date` sleep 30 done 为什么php脚本在后台启动后会停止,而bash脚本不会呢? 什么可能导致这种不同的行为?