shell脚本变量和参数

1170人浏览 / 1人评论

1、变量讲解

$0 获取当前执行的shell脚本名称
$n 获取当前执行的shell脚本的第n个参数,如$1 $2
$# 获取当前执行的shell脚本的参数总个数
$* 获取当前shell脚本所有的传参参数,不加引号和$@相同,加双引号相当于“$1 $2 $3”
$@ 获取当前shell脚本所有的传参参数,不加引号和$*相同,加双引号相当于“$1”"$2""$3"
$? 获取执行上一个指令的状态,0为正确,非0为错误
$$ 获取执行当前脚本的pid
$! 获取上一个后台工作的进程的进程号
$_ 获取在此之前执行的命令或脚本的最后一个参数

2、变量子串

${name} 返回变量$name的内容
${#name} 返回变量$name的内容总长度(按字符)
${name#liang} 从变量开头开始删除最短匹配liang的子串
${name##liang} 从变量开头开始删除最长匹配liang的子串(贪婪匹配)
${name%liang} 从变量结尾开始删除最短匹配liang的子串
${name%%liang} 从变量结尾开始删除最长匹配liang的子串(贪婪匹配)
${name/liang/wang} 把wang替换成第一个匹配到的liangzeyu
${name//liang/wang} 把wang替换成所有匹配到的liangzeyu(贪婪匹配)

3、数值计算

+ -        加法 减号
* /        % 乘 除 取模
**         幂运算
++ --      增加 减少
! && ||   逻辑符号:取反 与(and) 或(or)
< <= > >=  比较符号 小于 小于等于 大于 大于等于
== != =   相等 不相等 相当于
<< >>      向左移位  向右移位
~ | & ^    按位取反 按位异或 按位与 按位或
= += -= *= /= %=  a+=1 等于 a=a+1

4、运算命令

(()) 用于整数运算 ==>echo $((1+1))
let  用于整数运算 ==>let i=i+8 
bc   计算器
expr 用于整数运算 ==> expr $i + 6 &>/dev/null #判断整数
$[]  用于整数运算 echo $[2*5]
awk  用于整数运算和小数运算  echo '13 14'|awk '{print $1+$2}'

5、条件测试

测试符 描述 示例
-e 文件或目录存在为真 [ -e path ] path 存在为 true
-f 文件存在为真 [ -f file_path ] 文件存在为 true
-d 目录存在为真 [ -d dir_path ] 目录存在为 true
-r 有读权限为真 [ -r file_path ] file_path 有读权限为 true
-w 有写权限为真 [ -w file_path ] file_path 有写权限为 true
-x 有执行权限为真 [ -x file_path ] file_path 有执行权限为 true
-s 文件存在并且大小大于0 为真 [ -s file_path ] file_path 存在并且大小大于 0 为 true

6、布尔运算符

运算符 描述 示例
! 非关系,条件结果取反 [ ! 1 -eq 2 ]为 true
-a 和关系,在[]表达式中使用 [ 1 -eq 1 -a 2 -eq 2 ]为 true
-o 或关系,在[]表达式中使用 [ 1 -eq 1 -o 2 -eq 1 ]为 true

7、逻辑判断符

&& 逻辑和,在[[]]和(())表达式中或判断表达式是否为真时使用
[[ 1 -eq 1 && 2 -eq 2 ]]为 true
(( 1 == 1 && 2 == 2 ))为 true
[ 1 -eq 1 ] && echo yes 如果&&前面表达式为 true 则执行后面的
|| 逻辑或,在[[]]和(())表达式中或判断表达式是否为真时使用
[[ 1 -eq 1 || 2 -eq 1 ]]为 true
(( 1 == 1 || 2 == 2 ))为 true
[ 1 -eq 2 ] || echo yes 如果||前面表达式为 false 则执行后面的

8、括号用途总结

( )  用途 1:在运算中,先计算小括号里面的内容 用途 2:数组 用途 3:匹配分组
(( )) 
用途 1:表达式,不支持-eq 这类的运算符。不支持-a 和-o,支持<=、>=、<、>这类
比较符和&&、||
用途 2:C 语言风格的 for(())表达式
$( ) 执行 Shell 命令,与反撇号等效
$(( )) 用途 1:简单算数运算  用途 2:支持三目运算符 $(( 表达式?数字:数字 ))
[ ] 条件表达式,里面不支持逻辑判断符
[[ ]] 
条件表达式,里面不支持-a 和-o,不支持<=和>=比较符,支持-eq、<、>这类比较
符。支持=~模式匹配,也可以不用双引号也不会影响原意,比[]更加通用
$[ ] 简单算数运算
{ } 
对逗号(,)和点点(...)起作用,比如 touch {1,2}创建 1 和 2 文件,touch 
{1..3}创建 1、2 和 3 文件
${ } 
用途 1:引用变量
用途 2:字符串处理

9、整数比较符

-eq  等于    [ 1 -eq 1 ]为 true
-ne  不等于  [ 1 -ne 1 ]为 false
-gt  大于    [ 2 -gt 1 ]为 true
-lt  小于    [ 2 -lt 1 ]为 false
-ge  大于或等于 [ 2 -ge 1 ]为 true
-le  小于或等于 [ 2 -le 1 ]为 false

全部评论

liangzeyu
2021-01-15 14:40
666