shell-简约笔记

  shell判断表达式

------

source 导入其它sh文件


$#             -- 参数的总数 
$@            -- 所有参数值,等分划分相互独立 
$*            -- 所有参数值,作为一个整体 

命令 test

test    [选项]    [name]

|       选项       |                  说明                  |            示例            |
| :--------------: | :------------------------------------: | :------------------------: |
|        -e        |            判断文件是否存在            |                            |
|        -f        |        判断文件是否存在且为文件        |                            |
|        -d        |          判断是否存在且为目录          |                            |
|   -r , -w , -x   |    分别判断文件是否存在且有rwx权限     |                            |
|     -u , -g      |  分别判断文件是否存在且有uid和gid属性  |                            |
|        -k        |     判断文件是否存在且是二进制文件     |                            |
|        -s        | 判断文件是否存在且是非空文件(文件内容) |                            |
|       -nt        |      判断[file01]是否比[file02]新      | test [file01] -nt [file02] |
|       -ot        |      判断[file01]是否比[file02]旧      | test [file01] -nt [file02] |
|       -ef        |    判断是否同一文件(inode是否同一)     |                            |
|        -z        |    判断参数内容或字符串长度是否为0     |  test -z [name] / "hello"  |
| [str01]==[str02] |              判断是否相等              |   test [str01]==[str02]    |
|        -a        |       多条件并立使用,-a --> and        | test [-r ···] -a [-w ···]  |
|        -o        |        多条件选择使用,-o --> or        | test [-r ···] -o [-w ···]  |

注:-eq、-ne、-gt、-lt、-ge、-le分别为判断相等、不等、大于、小于、大于等于、小于等于,可用(( [num01 ] [运算符] [num02] ))取代;例:((  20 >= 10 ))。

------

 判断符号 [ ]

格式:[  "${name}"  ==  "hello"  ] (含空格)

[[ [name] =~ [0-9]+ ]]    -- 当中 =~ 为开启匹配正则表达式

 set


-u                 -- 发现任何未定义变量结束运行,并抛出异常 
-e                 -- 发现任何命令的$?为非0,结束运行并抛出异常 
-o pipefail     -- 管道中的所有命令都成功,命令的返回值才是0 
 

read


-a            --  输入的值为数组,空格为分隔符 
-d [val]    --  设置结束标识符,输入[val]结束 
-p [val]    --  提示信息
-e             --  在输入的时候可以使用命令补全功能
-n [val]    --  定义输入文本的长度 
-r             --  屏蔽\转义字符 
-s             --  安静模式    
-t            --  输入时等待时间

while read line        -- 读取文件   
do
    echo $line
done < [file]
```

 判断语句和循环语句

------

 if


if [ 判断条件 ];then
    ···
elfi [ 判断条件 ];then
    ···
else
    ···
fi
 

 case ... esac

注:相当于java中 switch ... case


case [判断变量] in
[值1]|[值2]..)
    ···;;
[值1]|[值2]..)
    ···;;
[值1]|[值2]..)
    ···;;
esac
 

------

 循环

 while ... do ... done


while [判断条件]
do
    ···
done
 

 读取文件:

```
while read [row]
do
    echo $[row]
done < [filepath]
```

 until...do...done

```
until [判断条件]        # 为真则停止循环
do
    ···
done
```

 for do done


for [var] in [number] [number01] ...
do
    ···
done
 


for ((var=1;var<=10;var++))
do
    ···
done
 

读取文件

```
[file]内容
hello word
good!
```

```
for $(cat [file])    
-- 默认以空格为读取分界点,只需要将环境变量IFS(export)修改为\n,
-- 既可将分界点改为换行读取
```

 控制语句break和continue

break :结束整个循环的执行,默认情况下结束离它最近的一个循环。

continue :跳过循环,进入下一次循环。


for ((var i;i<=10;i++))
do
    ...
    break/continue
done
 

------

 数组

声明:`[array] = ( var1 var2 var3 ···)`

获取:`echo "${array[0]}"${array...}`

获取文件内容:`[array] = ( $(cat [file] ) )`    //每行做一个值,由IFS(export)控制

#### declare 声明关联数组

关联数组    === >    集合     key-value 


declare -A [array]=([key1]="value1" [key2]="value2")    //声明一个关联数组
[array][key]=[value]                                    //赋值或修改
${[array][*]}                                            //获取所有value
${![array][*]}                                            //获取所有key
${#[array][*]}                                            //统计key-value数量
unset [array][key]                                        //删除指定key-value
```

------

 函数


[name]() {
    ···
}

function [name] () {        
    ···
}



[name]() {
    echo $1 $2 ···        # 大于9个参数后${num}
}
[name]    [参数] ···    # 调用并传参

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值