Please enable JavaScript.
Coggle requires JavaScript to display documents.
shell编程 (位置参数 (0~9, ${255}, 确定参数个数 $#, shift 访问多个参数, shell函数的位置参数
shell…
shell编程
位置参数
-
-
-
-
-
作为一个集体来处理
$* 双引号引起来时 整体转变为一个字符串
$@ 双引号时, 每一项变成一个字符串
-
奇珍异宝
-
进程替换
组命令(推荐) 在 当前shell中执行所有命令
subshell在当前shell的一个子副本中执行命令
管道线的命令总是在子shell中执行,任何给变量赋值的命令都会遭遇问题, 可以使用进程替换来解决.
-
-
-
-
-
-
变量
-
-
参数展开时,如果变量名含义不明确,可以使用{}限定
mv $filename ${filename}1
here documents
-
-
-
把<<改为<<-
SHELL会忽略开头的tab,从而允许缩进以提高可读性
-
流程控制
if
-
-
-
-
文件表达式
-
-b file (file存在并且是一个块设备)
-c file 字符设备
-d file 目录
-e file 文件存在
-f file 常规文件
-g file 文件存在并且被设置了group ID
-G file 并且属于有效group ID
-k file 'sticky' bit set
-L 符号链接
-O 并且属于有效user ID
-p file named pipe
-r file 文件存在且可读
-s file 文件存在并且长度大于0
-S file network socket
-t fd 用来决定是否重定向了
-u file file存在并且被setUID
-w -x file 可写 可执行
-
-
-
-
-
-
-
数组
bash仅支持1维数组
数组赋值
-
多个值赋值 name=(value1 value2 value3 ...)
还可以指定下标
days=([0]=Sun [1]=Mon [2]=Tue [3]=Wed [4]=Thu [5]=Fri [6]=Sat)
-
-
-
-
-
-
-
-
字符串和数字
基本参数
-
-
管理空变量的展开
-
-
${parameter:?word}
若para为空,会报错,word内容发送到stderr
${parameter:+word}
如果param不为空,展开结果是word值, 而para值不改变
-
字符串展开
-
-
-
-
${parameter/pattern/string}
${parameter//pattern/string}
${parameter/#pattern/string}
${parameter/%pattern/string}
对param内容进行查找替换,如果找到了Pattern,则用string替代
正常情况下, 只有第一个匹配项会被替换掉
而在//形式下, 所有匹配项都会替换
/#要求匹配项出现在字符串的开头
/%要求匹配项出现在字符串的末尾
/string可以省略,这样会删除匹配的文本
大小写转换
-
${parameter,,} 全部小写
${parameter,} 第一个字符小写
${parameter^^} 全部大写
${parameter^} 首字母大写
算数求值和展开
-
-
-
逻辑运算符
-
计算结果是0 ,则 是false, (()) 将其映射为shell异常的退出码
-
-
-
-
-
-