为什么传递0作为参数会导致假阳性(打印"True")?
#!/bin/zsh
k="$1"
if ((0 < k < 1))
then
echo "True"
fi
注意这个脚本名为stitch_applier.sh
终端
% ./stitch_applier.sh 0
True
这是在Linux系统上运行的。
我使用的是GNU bash,versión 5.0.3(1)-release (x86_64-pc-linux-gnu),我想知道为什么一个简单的赋值语句会给出一个语法错误:
#/bin/bash
var1=/tmp # This works
let var2=/tmp # This fails with syntax error: Operand expected (error is "/tmp")
有人知道为什么吗?谢谢
我运行的是Linux3.10.0-693.2.el7.x86_64,对于我的生活,我不知道为什么会发生这种情况。它似乎是一个bug和外壳检查发现没有问题。
#!/bin/bash
set -o nounset
### functions
options=(one two three)
select var in "${options[@]}"; do
# make sure it is a valid choice
if (( REPLY <= ${#options[@]} )) && [[ $REPLY =~ ^[0-9]+$ ]]
下面的shell脚本总结了传递给它的所有参数(空格分隔):
sum=0
for arg in "$@"; do
(( sum += arg ))
done
echo $sum
我把它保存为SumAll.sh。因此,它的作用如下:
sh SumAll.sh 2 4 6 8
20
或
bash SumAll.sh 1 -2 3 -3
-1
它们都在我的本地机器(MacBook)上工作,但是当我在linux服务器上尝试相同的时候,用bash运行脚本是有效的,但是用sh运行不起作用。我得到以下错误:
sum: '+=': No such file or dire
请有人解释一下这是为什么,特别是我没有在if语句中变量的名字之前使用‘$’字符这个事实吗?我搜索了,但找不到解释。
#!/usr/bin/env bash
one="$1"
two="$2"
three="$3"
four="$4"
if [[ one -le two ]] && [[ three -ge four ]]; then
echo "TRUE: $one <= $two && $three >= $four"
else
e
这是我的密码
my $shell_line_diff=`echo $(($(diff -U 0 ftest1.txt ftest2.txt|grep ^\+|wc -l)-$(diff -U 0 ftest1.txt ftest2.txt|grep ^\-|wc -l)))`;
print "difference in the number of lines is $shell_line_diff\n";
评估脚本在Linux上运行良好。
但在perl中,它给出了以下结果:
sh: -c: line 0: syntax error near unexpected token `
这是剧本
user@linux:~$ cat script.sh
#!/bin/bash
for i in `seq $#`
do
echo $i
done
user@linux:~$
输出
user@linux:~$ ./script.sh a b c
1
2
3
user@linux:~$
Desired输出
我想得到这样的论证价值.而不仅仅是数字
user@linux:~$ ./script.sh a b c
1 - a
2 - b
3 - c
user@linux:~$
我一般都是Unix和Linux的新手,在if语句中无法进行逻辑比较。
我相信这是一个非常基本的错误,但我就是找不到错误。
if (7+3 == 10); then
echo "nice this works"
elif (7+3 == 73); then
echo "too bad string concatenation"
else
echo "I really don't understand shell"
fi
回声:我真的不懂贝壳。
产出1:
Enter your value: 12
./testscript.sh: line 4: 12: command not found
Your value is more than 10
产出2:
Enter your value: 5
./testscript.sh: line 4: 12: command not found
Your value is more than 10
我要知道是怎么回事。我的Linux测试就在明天:
#!/bin/bash
echo -n "Enter your value: "
read value
if [$value -lt 1
我有一个像这样的剧本
#!/bin/bash
#
for i in `seq -w 22 35`
do
cd /folder/d"$i"
generate_XDS.INP d"$i"_001.img.bz2 #makes a text file "XDS.INP"
u=`grep UNIT_CELL_CONSTANTS /folder/d${i-1}/CORRECT.LP | tail -n 1` #get info from previous run
#u is supposed to be something like: UNI
我正在尝试以50为增量处理一些文件。它似乎起作用了,但我得到一个错误,即找不到命令。
文件sleepTest.sh:
#!/bash/bin
id=100
for i in {1..5}; do
$((id+=50))
sh argTest.sh "$id"
sleep 2
done
文件argTest.sh:
#/bash/bin
id=$1
echo "processing $id..."
输出为
sleepTest.sh: line 6: 150: command not found
processing 150
slee
以下代码(使用bash、zsh和ksh测试,其他shell的结果可能有所不同)返回a is 0 (num)。a=''也是如此。分配a=0或a=1的结果是可预测的。引用表达式不会更改结果。那么,为什么双括号将空变量和空变量视为数值等于零呢?
unset a
#a=''
#a=0
#a=1
if [[ $a == 1 ]] ; then
echo 'a is 1 (string)'
fi
if [[ "$a" == 0 ]] ; then
echo 'a is 0 (string)'
fi
if [
我试图计算由客户提供的参数数和第一个参数的乘法。这里的参数是10,15,所以参数总数是2。现在我希望shell执行2* 10 (因为10是第一个参数)。我得到的结果不是答案,而是代码。
我写的程序:
r=$(echo "$1 \* $#")
echo "Following are the numbers you entered $@ "
echo "first number : $1. and second number: $2."
echo "total number of entered numbers: $#"
echo &
我正在尝试自动创建MySQL用户--所以我正在构建一个bash cron,它将动态地创建它们。问题是,当我创建它们时,我使用的是随机生成密码,它可以包括字符,如^、$、%等。
使用以下操作失败:
create_database=$(mysql --login-path=local -se "CREATE USER IF NOT EXISTS 'user'@'localhost' IDENTIFIED BY '1234!!ABC^@DEFGH';")
鉴于以下各项取得成功:
create_database=$(mysql --log