只是学习bash并尝试在脚本中实现功能。
下面的脚本通过ShellCheck运行良好,但是从命令行运行bash时出现语法错误
这一定是我定义函数的方式,但是我想不出正确的方法-尤其是如果它通过ShellCheck
error is on line 24
syntax error near unexpected token `${\r''
`autounload() {
脚本:
#!/bin/bash
# /home/pi/scripts/usb-unloader.sh
#
# Called from {SCRIPT_DIR}/usb-initloader.sh
# make sure to chmod 0755 on file
#
# UnMounts usb device on /media/<device>
# Logs changes to /var/log/syslog and local log folder
# use tail /var/log/syslog to look at latest events in log
#
# CONFIGURATION
#
LOG_FILE="$1"
MOUNT_DIR="$2"
DEVICE="$3" # USB device name (from kernel parameter passed from rule)
#
# check for defined log file
if [ -z "$LOG_FILE" ]; then
exit 1
fi
#
# autounload function to unmount USB device and remove mount folder
#
autounload() {
if [ -z "$MOUNT_DIR" ]; then
exit 1
fi
if [ -z "$DEVICE" ]; then
exit 1
fi
dt=$(date '+%Y-%m-%d %H:%M:%S')
echo "--- USB Auto UnLoader --- $dt"
sudo umount "/dev/$DEVICE"
sudo rmdir "$MOUNT_DIR/$DEVICE"
# test that this device isn't already mounted
device_mounted=$(grep "$DEVICE" /etc/mtab)
if ! "$device_mounted"; then
echo "/dev/$DEVICE successfully Un-Mounted"
exit 1
fi
}
autounload >> "$LOG_FILE" 2>&1
这是我开始定义函数的代码部分
#
autounload() {
if [ -z "$MOUNT_DIR" ]; then
exit 1
fi
我试图将函数在调用它的位置上下移动,但这似乎没有什么区别。
正如在注释中发现的,您有一个Windows(DOS)文件,该文件随后在UNIX计算机上运行。这样做的问题是,在DOS中\r\n
,行尾在UNIX中\n
,而在UNIX中,行尾在,所以\r
每行中都有多余的东西。
要摆脱这些问题,您可以使用以下任一方法:
dos2unix
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句