Linux 灰匹配运算符(~)
我正在尝试将linux脚本安装到我的WD world edition驱动器上 该脚本是为Bash debian编写的,但我的WD只运行带有ash的busybox。尽管如此,我还是从谷歌那里获得了大部分功能。我只找到了一个与之对应的运算符,=~运算符 如何将=~操作符的功能从旧脚本移植到ash 脚本:Linux 灰匹配运算符(~),linux,bash,ash,Linux,Bash,Ash,我正在尝试将linux脚本安装到我的WD world edition驱动器上 该脚本是为Bash debian编写的,但我的WD只运行带有ash的busybox。尽管如此,我还是从谷歌那里获得了大部分功能。我只找到了一个与之对应的运算符,=~运算符 如何将=~操作符的功能从旧脚本移植到ash 脚本: #! /bin/bash # posttorrent.sh by Killemov { # Log file, file where we tell what events have been
#! /bin/bash
# posttorrent.sh by Killemov
{
# Log file, file where we tell what events have been processed.
LOG_FILE=/var/log/posttorrent.log
# Username for transmission remote.
TR_USERNAME="username"
# Password for transmission remote.
TR_PASSWORD="password"
# Get current time.
NOW=$(date +%Y-%m-%d\ %H:%M:%S)
# Source directory, should not be changed.
SRC_DIR="${TR_TORRENT_DIR}/${TR_TORRENT_NAME}"
# Directory to store the un-compressed files in..
DEST_DIR="${TR_TORRENT_DIR}/${TR_TORRENT_NAME}/"
# This parameter string could be passed from Transmission in the future.
TR_TORRENT_PARAMETER="EXTRACT SLEEP1h"
echo "text"
if [ -e "$SRC_DIR/keep" ]; then
TR_TORRENT_PARAMETER="$TR_TORRENT_PARAMETER KEEP"
fi
if [ -e "$SRC_DIR/exit" ]; then
TR_TORRENT_PARAMETER="EXIT"
fi
# Actual processing starts here.
if [[ "$TR_TORRENT_PARAMETER" =~ "EXIT" ]]; then
echo $NOW "Exiting $TR_TORRENT_NAME" >> $LOG_FILE
exit 0
fi
echo "text2"
if [[ "$TR_TORRENT_PARAMETER" =~ "EXTRACT" ]]; then
cd $TR_TORRENT_DIR
if [ -d "$SRC_DIR" ]; then
IFS=$'\n'
unset RAR_FILES i
for RAR_FILE in $( find "$SRC_DIR" -iname "*.rar" ); do
if [[ $RAR_FILE =~ .*part.*.rar ]]; then
if [[ $RAR_FILE =~ .*part0*1.rar ]]; then
RAR_FILES[i++]=$RAR_FILE
fi
else
RAR_FILES[i++]=$RAR_FILE
fi
done
unset IFS
if [ ${#RAR_FILES} -gt 0 ]; then
for RAR_FILE in "$(eval \$$RAR_FILES[@])"; do
unrar x -inul "$RAR_FILE" "$DEST_DIR"
if [ $? -gt 0 ]; then
echo $NOW "Error unrarring $TR_TORRENT_NAME" >> $LOG_FILE
transmission-remote -n $TR_USERNAME:$TR_PASSWORD -t$TR_TORRENT_ID --verify --start
exit 0
fi
done
if [[ ! "$TR_TORRENT_PARAMETER" =~ "KEEP" ]]; then
SLEEP=$(expr match "$TR_TORRENT_PARAMETER" '.*SLEEP\([0-9a-zA-Z]*\)')
if [ ${#SLEEP} -gt 0 ]; then
sleep $SLEEP
fi
transmission-remote -n $TR_USERNAME:$TR_PASSWORD -t$TR_TORRENT_ID --remove-and-delete
fi
echo $NOW "Unrarred $TR_TORRENT_NAME" >> $LOG_FILE
fi
fi
fi
} &
我在使用间接引用时遇到了一些问题,我希望我正确地修复了$VARIABLE=~paten,您应该能够使用:
echo "$VARIABLE" | grep -E PATTERN
但是我想你也会在算术表达式I++上遇到一些麻烦-如果它已经实现了,那么你仍然需要使用I=$$I+1语法,如果它没有实现,那么使用I=$expr$I+1语法
我想您之所以使用IFS=$“\n”是为了在换行符上拆分查找,但最好将查找结果发布到一个临时文件中,然后执行一行while read;做好的,是的。我试着运行这个脚本,虽然它看起来很好10分钟,但当我回来时,在数组[i++]行之后,我收到了一封垃圾邮件,上面写着not found。由于我不是一个很喜欢bash/ash的人,我觉得我最好找点别的东西,很遗憾。grep-Eq稍微好一点,因为它不打印任何东西。