版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢 在bash shell中,整数的运算也会偶尔遇到。...: 7.2: 语法错误: 无效的算术运算符 (错误符号是 ".2") 从以上例子中我们可以看出,采用小括号这种运算方式,完美的支持有符号及无符号的整数运算,不支持浮点类型的数学运算。...: 7.2: 语法错误: 无效的算术运算符 (错误符号是 ".2") [root@GeekDevOps ~]# echo $[c+d] 3 从以上例子中我们可以看出,采用中括号与小括号没有很大的差异,只是书写方式不一样而已...x=a+d [root@GeekDevOps ~]# echo $x 13 [root@GeekDevOps ~]# let x=a+e -bash: let: 7.2: 语法错误: 无效的算术运算符...(错误符号是 ".2") [root@GeekDevOps ~]# let x=c+d [root@GeekDevOps ~]# echo $x 3 从以上例子中,我们可以看到,使用let命令来进行算术运算与小括号及中括号无较大差异
,命令错误,继续执行 脚本执行,语法错误,终止执行 bash -n 语法检查,但不检查命令错误 bash -x 查看执行过程,跟踪调试 pstree :查看进程树 pstree -p $$:可以查看当前进程...6、算术运算 查看bash中算术运算:help let 常用算术运算符:+、-、*、/、%、**(乘方) 算术运算实现: 1 let var=算术表达式 注意: let i=0 -> echo $...--->1 k=0 --> let k++ -->echo $? 1 k=0 --> let ++k -->echo $?...0 2 var=$[算术表达式] 3 var=$((算术运算表达式)) 4 var=$(expr arg1 arg2 arg3...) 5 declare -i var = 数值 6 echo '算术表达式...判断链接文件本身是什么文件( -h 存在且为符号链接文件) -p 管道文件 -S 套接字文件 -s 大小为0 -r filename:...并且该文件是否拥有读权限(该权限是实际权限,而不是ll显示的权限
cp `mkdir back` test.sh back ,反引号中的先执行,然后执行拷贝cp命令。 6): 1. 空命令 bash的一个内建命令,退出码是0。与 true作用相同。 2....6、判断 执行man test可以查看所有测试表达式可以比较和判断的类型。...7、调试 sh -nyour_script 不需要执行脚本只是检查语法的模式,返回所有语法错误。 sh -x strangescript 执行该脚本并显示所有变量的值。...9、(()) 专门来做数值运算,如果表达式求值为 0,则设置退出状态为 1;如果求值为非 0 值,则设置为 0。不需要对 (( 和 )) 之间的操作符转义。算术只对整数进行。...BASH 的返回值可以用 return 语句来指定返回一个特定的整数,如果没有 return 语句显式的返回一个返回值,则返回值就是该函数最后一条语句执行的结果(一般为 0,如果执行失败返回错误码)。
2. shell 脚本编程基础 2.1 脚本调试 只检测脚本中的语法错误,无法检查出命令错误,不真正执行脚本 bash -n /path/to/script.sh 调试并执行 bash -x /path.../to/script.sh 脚本错误常见的有三种: 语法错误:会导致后续的命令不继续执行,可以用 bash -n 检查错误,提示的出错行数不一定是准确的。...权限 -g 测试文件是否存在且拥有 sgid 权限 -k 测试文件是否存在且拥有 sticky 权限 -z 如果 STRING 的长度为零则为真 -n 如果 STRING 的长度非零则为真 -b 测试文件是否存在并且是块设备文件.../bin/bash i=1 sum=0 until [ $i -eq 10 ] do sum=$[$i+$sum] let i++ done echo $sum (6) 循环控制语句 continue...函数的退出状态码: 默认取决于函数中执行的最后一条命令的退出状态码 自定义退出状态码,其格式为: return 从函数中返回,用最后状态命令决定返回值 return 0 无错误返回 return 1-
,通过具体的文件路径指定文件执行 直接运行解释器,将脚本作为解释器程序的参数运行 bash退出状态码 范围是0-255 脚本中一旦遇到exit命令,脚本会立即终止,终止退出状态取决于exit命令后面的数字...不能使用标点符号 不能使用bash中的关键字 有效命名: RUNOOB LD_LIBRARY_PATH _var var2 无效命名: ?...增强赋值: +=,‐=,*=,/=,%= 乘法符号有些场景中需要转义 : *\ bash有内建随机数生成器:$RANDOM 完成算数运算 () let var(变量名)=算术表达式 () var=$[算术表达式...乘法符号有些场景中需要转义,如*。...- n:检测脚本中的语法错误 图片 图片 图片 图片 环境配置 bash配置文件 生效范围分类 全局配置: /etc/bashrc /etc/profile /etc/profile.d
本文在于提供基础的shell编程语法和简单的实例,帮助同学快速开发,可当做shell手册使用也非常善 shell脚本的执行和模块加载 shell中的变量 位置参数和预定义变量 表达式的运算命令 表达式判断符号及相关操作符...读入或加载指定的Shell脚本文件,然后依次执行指定的Shell脚本中的语句 shell规范 一个规范的Shell脚本在第一行会指出由哪个程序(解释器)来执行脚本中的内容,这一行内容Linux bash.../bin/sh,bash与sh的区别 , sh为bash的软连接 3shell 中的变量 变量的赋值方法为:先写变量名称,紧接着是 "=" ,最后是值,中间无任何空格 赋值时使用带引号的作用 双引号:允许通过...命令执行后返回的状态,0表示没有错误,非0表示有错误 $$ 当前进程的进程号 $!...not ,非, 两端相反,则结果为真 表达式判断符号 test 、[] 、[[]] 、 (()) 的区别 表达式判断符号 test [] [[]] (()) 边界是否需要空格 需要 需要 需要 不需要
5、Shell脚本的命名应以.sh为扩展名 例如:1.sh 6、成对的符号应尽量一次性写出来,然后退格在符号内增加内容,以防止遗漏。...11、脚本中的单引号、双引号及反引号必须为英文状态下的符号。...:命令执行后返回的状态,0表示没有错误,非0表示有错误 $$ :当前进程的进程号 $! :后台运行的最后一个进程号 $0 :当前执行的进程名 假如我现在有一个 1.sh脚本文件,内容如下 #!...其操作方法如下: let 运算命令的用法 let运算命令的语法格式为:let 赋值表达式 let 赋值表达式的功能等同于“((赋值表达式))” 范例:给变量 i 加8 expr 命令的用法 1...e, e的全拼为 exists 文件存在则为真 4 -s, s的全拼为 size 文件存在且大小不为0则为真 5 -r ,r的全拼为 read 文件存在且可读则为真 6 -w ,w的全拼为write 文件存在且可写则为真
:不会执行脚本,只检查有无语法错误,如果没有检测到,就无输出 [root@game scripts]# cat test7.sh #!.../bin/bash echo "guoke123" [root@game scripts]# sh -n test7.sh #脚本没有语法错误,所以没有输出 #演示脚本存在语法错误 #!...5.shellcheck shellcheck是一个可检查sh/bash脚本和命令语法的小工具 #常见的shell脚本错误示例 #1.中括号两端没有空格 [root@game scripts]# cat...sh test.sh test.sh: line 4: [0: command not found install fail #提示:错误在第四行 #2.成对的符号没有写全,漏写 #成对的符号例如:...#需要注意的是shell脚本解释器一般不会很精确的定位到错误,需要上下联都看一下 #总结 在进行脚本编写的过程中,应该注重书写的规范性,成对符号或是循环语句应一次写完,再写相应的内容,避免不必要的麻烦
本篇博客文章将介绍如何解决这个错误。原因分析该错误通常是因为在Bash脚本中存在语法错误或错误的引号使用方式导致的。以下是一些常见的可能原因:在脚本中使用了未正确闭合的引号。...在上述示例中,双引号没有正确闭合,导致语法错误。 2. 在脚本中使用了非法的字符或符号。...Bash脚本中有一些特殊字符或符号(如$、(、)等),如果没有正确转义或引用,就会导致语法错误。...bashCopy codeecho I have $5 in my pocket.在上述示例中,$5会被解析为一个变量,而变量5未定义,导致错误。...在上述示例中,使用了反斜杠来转义$符号,避免了语法错误。 3. 检查脚本中是否有其他语法错误。这可以通过编写和运行一个简单的测试脚本来找出。bashCopy code#!
:上一个命令的执行状态返回值(回传码) 程序执行结果 程序状态返回代码(0-255) 0:表示正确 1-255:表示错误 1,2,127系统预留 id 用户 echo $输出重定向:...bash中如何实现条件判断: 条件测试类型: 整数测试 字符测试 文件测试 条件测试的表达式: [ expression ] (注意空格) [[ expression ]] test...1.let 算术运算表达式 let c=$a+$b 2....$((算术运算表达式)) c=(($a+$b) 4.expr 算术运算表达式 (注意表达式中各操作数及运算符之间要有空格) c=`expr $a + $b` 提前结束脚本 exit:退出脚本...else statement4 .... fi 测试脚本是否有语法错误: bash -n file.sh bash -x 脚本 单步执行命令 编写一个脚本
bash完全兼容sh,也就是说,用sh写的脚本可以不加修改的在bash中执行。...2.3 变量类型 运行shell时,会同时存在三种变量: 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。...原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 expr; 在Shell中进行算术运算的方法: 1)let表达式 let c=a + b 2) $[算术表达式] ...6、Shell数组 bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组下标由0开始。 在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。.../bin/bash sum=0 i=0 while ((i<100));do let i++ if ((i%7==0));then continue fi let sum
20.5 Shell脚本中的逻辑判断 逻辑表达式 在[ ]中括号中: -lt:=little than 小于 -le:=little && equal 小于等于 -eq:=equal 等于 -ne:.../bin/bash n=`wc -l /tmp/test.txt` if [ $n -gt 20 ] then echo 1 else echo 0 fi 在该脚本中无语法错误,只是我们预设...echo 1 else echo 0 fi 即,如果变量n为空则显示error并退出该脚本。...[root@localhost sbin]# sh if.sh wc: /tmp/test.txt: 没有那个文件或目录 error 即,当该文件不存在的时候就会退出执行,不会提示存在语法错误。...(该脚本存在逻辑错误,只做效果演示用) 注意: 在该表达式中引用变量时要用双引号引起来。
获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。 定义数组 在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。...在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 "*" 不需要转义符号 "" 。 关系运算符 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。...let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量,具体可查阅:Bash let 命令 无限循环 无限循环语法格式: while : do command done...2.9 Linux let 命令 命令:let let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。.../bin/bash let a=5+4 let b=9-3 echo $a $b 以上实例执行结果为: 9 6 2.10 Shell 函数 linux shell 可以用户定义函数,然后在shell
在参数替换中为字符串变量赋值,在重定向操作(>)中,把一个文件长度截断为0(:>>这样用的时候,目标存在则什么都不做),这个只能在普通文件中使用,不能在管道,符号链接和其他特殊文件中使用; 5....甚至你可以用来注释(#后的内容不会被检查,但:后的内容会被检查,如果有语句如果出现语法错误,则会报错); 6....此变量值在使用的时候,返回的是最后一个命令、函数、或脚本的退出状态码值,如果没有错误则是0,如果为非0,则表示在此之前的最后一次执行有错误。...甚至你可以用来注释(#后的内容不会被检查,但:后的内容会被检查,如果有语句如果出现语法错误,则会报错); 6....此变量值在使用的时候,返回的是最后一个命令、函数、或脚本的退出状态码值,如果没有错误则是0,如果为非0,则表示在此之前的最后一次执行有错误。
127 执行脚本时最后一条指令未执行成功就不会显示0 或 中间有语法错误 >#f2.sh >#echo $?...0 最后一条指令执行成功,中间可能有未执行的指令,但中间没有语法错误 f3.sh >ls >exit 10 :指定运行脚本结束时的状态 例:退出时的数据是10 >#f3.sh >#echo.../f1.sh ># name=haha bash中的算术运算 >x=1 >y=2 >let z=x+y >echo z >>>3 1.let var=x+y 2....$[数字运算] : 中括号支持数据运算 3.$((数字运算)) 4.echo '算术表达式'|bc 5.var=$(expr $1 + $2 + ..)...bash随机数生成器 RANDOM (0-32767) [RANDOM%6] : 得到的是[0-5]的整数 [RANDOM%6+31] : 得到的是[0-37]的整数 > echo $[RANDOM
message}:如果变量var为空或已被删除,则将消息message发送到标准输出错误中,可以用来检测变量var是否可以被正常赋值。这种替换出现在shell脚本中,脚本将停止运行。.../com.sh 7,8,9,10 17 18 4.4 变量表达式测试 test命令在Shell脚本程序中主要用于测试一个表达式;如果条件为真,则返回一个0值。...: while [条件表达式] do 命令列表 done 循环执行“命令列表”中的命令,直至“条件表达式”的值为假。...4.6.3 until 语法: until [条件表达式] do 命令列表 done 循环执行“命令列表”中的命令,直至“条件表达式”的值为真。.../func1.sh: line 3: ` let sum=3+4 ' 可以看到并没有像想象中一样运行成功,而是报错了,意思有语法错误,在第三行let的地方(4.3 数值计算 有说let的使用
[ -r FILE ] 如果 FILE 存在且是可读的则为真. [ -s FILE ] 如果 FILE 存在且大小不为0则为真....:"命令是一个 bash 的内建命令,它的返回值为 0,就是 shell 返回的 true. 如: : echo $?...还能反转 bash 的"history mechanism" 需要注意的是,在一个脚本中,"history mechanism"是被禁用的....如果此令牌不是复合命令的开始符号,如该令牌是then、else、do、fi、done等符号,这说明该令牌不应该处在命令行的首位,因此,Shell提示语法错误信息。...6、将任何开头为$符号的表达式,执行变量替换。 7、将反引号内的表达式,执行命令替换。 8、将$((string))的表达式进行算术运算。
今天完成了一个纯shell脚本的小项目,里面用到了大量的正则表达式判断,就是利用shell 的 =~ 操作符判断字符串是否匹配指定的正则表达式以验证用户输入的有效性。...关于bash正则表达式的条件判断操作符=~,gnu官方网站上《Bash Reference Manual(Bash参考手册)》有详细说明 1 差不多就是这样子,使用很方便 $ [[ "hello world...expression ]] 表达式会返回2 赶紧到ubuntu下验证,如下图果然返回2, 也就是说bash认为^[[:alnum:].-_]+这个正则表达式有语法错误,可是何错之有啊?...,换成^[a-zA-Z0-9.-_]+ 同样是bash,为什么macOS和 Windows/MSYS 下就没问题呢?...所以为了避免上面的问题,建议在正则表达式中‘[]’中用到‘-’做普通符号要把它放在最后一个以避免低版本的bash把它当做区间符号。
expr $a - $b 结果为 -1 * 乘法 expr $a \* $b 结果为 2 / 除法 expr $b / $a 结果为 2 % 取余 expr $b % $a 结果为 0 = 赋值 a...expr 字符串 : 正则表达式 正则表达式匹配,返回值为符合匹配字符的长度,否则返回为0 expr match "helloworld" "....以 c=$((a+b)) 为例,即将 a+b 这个表达式的运算结果赋值给变量 c。 注意,如果 c=((a+b)) 这样的写法是错误的,不加$就不能取得表达式的结果。...如果 echo let a+b 会直接输出字符串 a+b ;若不想这样,可以使用let sum=a+b将 a+b 的结果保存在变量 sum 中。 示例:calculate2.sh脚本代码 #!.../bin/bash # 计算1+6赋值给变量a let a=1+6 # 计算变量a-1赋值给变量b let b=a-1 # 计算变量a+变量b赋值给变量c let c=a+b # 打印变量a,变量
查看脚本语法是否有错误: bash -n modify_suffix.sh 跟踪执行 sh -x modify_suffix.sh aaa 1.${var} 2....string} 若变量var为空,则把string输出到标准错误中,并从脚本中退出。...exp为真则为1,假则为0 [root@bogon ~]# echo $(3+2) -bash: 3+2: 未找到命令 [root@bogon ~]# echo $((3+2)) 5 [root@bogon...~]# echo $((3.5+2)) -bash: 3.5+2: 语法错误: 无效的算术运算符 (错误符号是 ".5+2") [root@bogon ~]# echo $((3>2)) 1 [root...a':'b')) -bash: 3>2?'a':'b': 语法错误: 期待操作数 (错误符号是 "'a':'b'") [root@bogon ~]# echo $((3>2?
领取专属 10元无门槛券
手把手带您无忧上云