我在 .sh 中使用 for 循环时出现“接近意外标记‘do’的语法错误”错误。这是代码:
#!/bin/sh
# some code
for flux in $(ls -d /home/eai/*/*/*) ; do
FICHIER=$(ls -p -tr $flux | grep -v / | head -n 1)
if [[ $FICHIER ]] ; then
# some code
fi
done
Run Code Online (Sandbox Code Playgroud)
1) sh script.sh 或 bash script.sh
'cript_1409.sh: line 24: syntax error near unexpected token `do
'cript_1409.sh: line 24: `for flux in $(ls -d /home/eai/*/*/*); do
Run Code Online (Sandbox Code Playgroud)
2) ./script.sh
-bash: ./script_1409.sh: /bin/sh^M: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)
1) …
我目前正在尝试通过 shell 脚本运行 R 脚本。
这里是 R 脚本:
test = rnorm(1:100, 1000)
write.csv(test, 'test.csv')
Run Code Online (Sandbox Code Playgroud)
这里是调用 R 的 bash 脚本:
#!/bin/bash -l
#SBATCH --partition=compute
#SBATCH --job-name=test
#SBATCH --mail-type=ALL
#SBATCH --mail-user=myemail@blabla.com
#SBATCH --time=00:10:00
#SBATCH --nodes=1
#SBATCH --tasks-per-node=12
#SBATCH --account=myaccount
module purge
module load R
${HOME}/test.R
Run Code Online (Sandbox Code Playgroud)
我想我做的一切都正确,但输出返回以下错误:
/mydirectory/test.R: line 3: syntax error near unexpected token `('
/mydirectory/test.R: line 3: `test = rnorm(1:100, 1000)'
Run Code Online (Sandbox Code Playgroud)
为什么我收到此错误?
我正在手册页上阅读此内容:
[-n number-to-stat[:max-size[:min-size][:num-directories[:chunk-size]]]]
Run Code Online (Sandbox Code Playgroud)
我将其解释为-n可选,但如何指定num-directories?
最好我不想为number-to-stat, max-size, min-size和输入任何内容chunk-size,只需给出一个值num-directories- 我该如何表达?
我知道这!用于否定 Bash 中的 if 条件,但我刚刚看到采用以下格式的代码:
if ! [[ CONDITION ]]; then
SOMETHING
fi
Run Code Online (Sandbox Code Playgroud)
这种格式和下面的格式有区别吗?
if [[ ! CONDITION ]]; then
SOMETHING
fi
Run Code Online (Sandbox Code Playgroud)
我试过谷歌,但还没有找到任何关于以前的语法。
我正在编写一个 bash 脚本来在 Synology 机器上构建 MariaDB 实例。当我运行它时,它可以工作,但出现错误:
admin@synology:/volume1/@appstore/MariaDB10/usr/local/bip$ ./mysql_backup
./mysql_backup: line 7: [: missing `]'
admin@synology:/volume1/@appstore/MariaDB10/usr/local/bip$ head -10 mysql_backup
#!/bin/bash
DBBACKUP=/volume1/remotebackup/mnt/devmysql.sql.gz
ERRFILE=/volume1/remotebackup/mnt/devmysqlerr.log
if [ -f "${DBBACKUP}.prev" && ! -f "${ERRFILE}" ] ; then
rm -f "${DBBACKUP}.prev"
mv "${DBBACKUP}" "${DBBACKUP}.prev"
fi
Run Code Online (Sandbox Code Playgroud)
添加一个空格和第二个关闭']',我仍然得到同样的错误。嵌套 'if' 语句提供了一个解决方案,但令我烦恼的是有些事情并不像我预期的那样。
我在阅读grep手册时遇到了一个问题,提到它的-e选项,
它说:
-e pattern, --regexp=pattern
Specify a pattern used during the search of the input: an input
line is selected if it matches any of the specified patterns.
This option is most useful when multiple -e options are used to
specify multiple patterns, or when a pattern begins with a dash
(`-').
Run Code Online (Sandbox Code Playgroud)
我对e缩写是什么感到困惑?谷歌搜索不到答案。
此外,很容易理解的是
“当使用多个 -e 选项指定多个模式时,此选项最有用”
但是,这是什么意思?
"或者当模式以破折号 (`-') 开头时。"
你能举个例子吗?
几年前我写了一个多部分脚本,它调用 rsync 并且它一直有效。经过一年的无用和大量 debian apt-get 更新,现在脚本停止工作。
Main2Network1.sh 调用 Main2Network2 有第 3 部分和第 4 部分,但脚本 Main2Network1.sh 第 27 行具有:
Main2Network1.sh: [[ not found
Run Code Online (Sandbox Code Playgroud)
第 27 行是
if [[ -z $VAR ]];
Run Code Online (Sandbox Code Playgroud)
当我编写脚本时,脚本 [[ ]] 是 if 然后只需按回车键即可工作的必要条件,即/sf/answers/1414134431/
也许有人可以告诉我他们是否在我的第 27 行左右的代码中看到任何最近弃用的语法(这就是我在运行脚本时遇到错误的地方)谢谢大家
主2网络1.sh
#!/bin/bash
#renames files changed files on NETWORK to _day_mnth_yr_NETWORK1 then puts maincomp version of file on network.
#THIS SHOULD BE PUT TO AUTOMATICALLY RUN AFTER TRAVEL2NETWORK SYNC
#info=NAME1 lists just changed Files/Dirs, -b must preceed --suffix,
# this will …Run Code Online (Sandbox Code Playgroud) 打字后 ;ls
我得到了这个回报 - bash: syntax error near unexpected token `;'
我该如何解决?
我尝试在我的 Ubuntu 机器上执行下面的代码,但它一直显示“条件表达式中的语法错误”和“'0-9'附近的语法错误”,你能告诉我为什么吗?
while ! [[ $num =~ ^[ 0-9 ] +$ && $num = 0 ]] ; do
Run Code Online (Sandbox Code Playgroud) [desktop ~]$ cat sa
sanmesh
shammas
sujil
givin
nepo
bijal
[desktop ~]$ sed -i -e '1i Header' -e '$a Trailor' sa
[desktop ~]$ cat sa
Header
sanmesh
shammas
sujil
givin
nepo
bijal
Trailor
Run Code Online (Sandbox Code Playgroud)