From c6bef767297ff80ace368090747aa4131c9c3627 Mon Sep 17 00:00:00 2001 From: colben Date: Wed, 23 Mar 2022 14:24:01 +0800 Subject: [PATCH] update --- content/post/shell.md | 264 +++++++++++++++++++++--------------------- 1 file changed, 132 insertions(+), 132 deletions(-) diff --git a/content/post/shell.md b/content/post/shell.md index 9b0bccf..52d5d0e 100644 --- a/content/post/shell.md +++ b/content/post/shell.md @@ -17,126 +17,126 @@ categories: ["shell"] - $1...$n #shell 位置参数 ## BASH 字符串处理 - ```bash - # 字符串 str 长度 - ${#str} - expr length "$str" - - # 子串 substr 出现位置,找不到返回 0 - expr index "$str" "$substr" - - # 子串 substr 开头匹配,找不到返回 0 - expr match "$str" "$substr" - - # 字符串 str 抽取左起位置 pos 后 长度 len 的子串 - ${str:$pos} - ${str:$pos:$len} - expr substr "$str" $pos $len - - # 字符串 str 抽取右起位置 pos 前的子串 - ${str: -pos} - ${str:(pos)} - - # 正则 pat 抽取字符串 str 开头子串 - expr match "$str" "\($pat\)" - expr "$str" : "\($pat\)" - - # 正则 pat 抽取字符串 str 结尾子串 - expr match "$str" ".*\($pat\)" - expr "$str" : ".*\($pat\)" - - # 删除字符串 str 开头的最短子串 sub - ${str#$sub} - - # 删除字符串 str 开头的最长子串 sub - ${str##$sub} - - # 删除字符串 str 结尾的最短子串 sub - ${str%$sub} - - # 删除字符串 str 结尾的最长子串 sub - ${str%%$sub} - - # 替换字符串 str 第一个子串 sub 为字符串 rep - ${str/"$sub"/"$rep"} - - # 替换字符串 str 所有子串 sub 为字符串 rep - ${str//"$sub"/"$rep"} - - # 替换字符串 str 开头的子串 sub 为字符串 rep - ${str/#"$sub"/"$rep"} - - # 替换字符串 str 结尾的子串 sub 为字符串 rep - ${str/%"$sub"/"$rep"} - - # var为空或没有设置,代入word,否则代入var值 - ${var:-word} - - # 如果var已经被设置且不为空,则代入它的值,否则代入word,并且在后面var始终为word的值。位置参量不能用这种方式赋值。 - ${variable:=word} - - # 如果变量var已被设置且值为非空,代入word值,否则什么也不代入 - ${variable:+word} - - # 如果变量var已被设置值且为非空,就代入它的值,否则输出word并从shell中退出,如果有省略了word,就会显示信息:parameter null or not set. - ${var:?word} - ``` +```bash +# 字符串 str 长度 +${#str} +expr length "$str" + +# 子串 substr 出现位置,找不到返回 0 +expr index "$str" "$substr" + +# 子串 substr 开头匹配,找不到返回 0 +expr match "$str" "$substr" + +# 字符串 str 抽取左起位置 pos 后 长度 len 的子串 +${str:$pos} +${str:$pos:$len} +expr substr "$str" $pos $len + +# 字符串 str 抽取右起位置 pos 前的子串 +${str: -pos} +${str:(pos)} + +# 正则 pat 抽取字符串 str 开头子串 +expr match "$str" "\($pat\)" +expr "$str" : "\($pat\)" + +# 正则 pat 抽取字符串 str 结尾子串 +expr match "$str" ".*\($pat\)" +expr "$str" : ".*\($pat\)" + +# 删除字符串 str 开头的最短子串 sub +${str#$sub} + +# 删除字符串 str 开头的最长子串 sub +${str##$sub} + +# 删除字符串 str 结尾的最短子串 sub +${str%$sub} + +# 删除字符串 str 结尾的最长子串 sub +${str%%$sub} + +# 替换字符串 str 第一个子串 sub 为字符串 rep +${str/"$sub"/"$rep"} + +# 替换字符串 str 所有子串 sub 为字符串 rep +${str//"$sub"/"$rep"} + +# 替换字符串 str 开头的子串 sub 为字符串 rep +${str/#"$sub"/"$rep"} + +# 替换字符串 str 结尾的子串 sub 为字符串 rep +${str/%"$sub"/"$rep"} + +# var为空或没有设置,代入word,否则代入var值 +${var:-word} + +# 如果var已经被设置且不为空,则代入它的值,否则代入word,并且在后面var始终为word的值。位置参量不能用这种方式赋值。 +${variable:=word} + +# 如果变量var已被设置且值为非空,代入word值,否则什么也不代入 +${variable:+word} + +# 如果变量var已被设置值且为非空,就代入它的值,否则输出word并从shell中退出,如果有省略了word,就会显示信息:parameter null or not set. +${var:?word} +``` ## BASH 数组 - ```bash - # 定义数组,有三种方式 - declare -a array - array=() - array[0]='value0' - - # 打印数组第一个元素 - echo ${array[0]} - - # 打印数组所有元素,有两种方式 - echo ${array[@]} - echo ${array[*]} - - # 打印数组所有索引,有两种方式 - echo ${!array[@]} - echo ${!array[*]} - - # 打印数组的元素个数,有两种方式 - echo ${#array[@]} - echo ${#array[*]} - - # 移除数组中索引为2的元素 - unset array[2] - - # 添加id为3的元素 - array[3]="" - ``` +```bash +# 定义数组,有三种方式 +declare -a array +array=() +array[0]='value0' + +# 打印数组第一个元素 +echo ${array[0]} + +# 打印数组所有元素,有两种方式 +echo ${array[@]} +echo ${array[*]} + +# 打印数组所有索引,有两种方式 +echo ${!array[@]} +echo ${!array[*]} + +# 打印数组的元素个数,有两种方式 +echo ${#array[@]} +echo ${#array[*]} + +# 移除数组中索引为2的元素 +unset array[2] + +# 添加id为3的元素 +array[3]="" +``` ## BASH 字典 - ```bash - # 定义字典 - declare -A dict - - # 新增或修改键 k1 的值 - dict['k1']='v1' - - # 打印对应键的值 - echo $['k1'] - - # 打印字典所有元素,有两种方式 - echo ${dict[@]} - echo ${dict[*]} - - # 打印字典所有键,有两种方式 - echo ${!dict[@]} - echo ${!dict[*]} - - # 打印字典的元素个数,有两种方式 - echo ${#dict[@]} - echo ${#dict[*]} - - # 移除键 k1 - unset dict['k1'] - ``` +```bash +# 定义字典 +declare -A dict + +# 新增或修改键 k1 的值 +dict['k1']='v1' + +# 打印对应键的值 +echo $['k1'] + +# 打印字典所有元素,有两种方式 +echo ${dict[@]} +echo ${dict[*]} + +# 打印字典所有键,有两种方式 +echo ${!dict[@]} +echo ${!dict[*]} + +# 打印字典的元素个数,有两种方式 +echo ${#dict[@]} +echo ${#dict[*]} + +# 移除键 k1 +unset dict['k1'] +``` ## 终端环境变量 PS1 参数 - \d 日期,格式为weekday month date,例如:"Mon Aug 1" @@ -187,24 +187,24 @@ categories: ["shell"] - 去掉头部 AA 和尾部 ZZ ## expect 自动输入密码 - ```bash - expect<> /etc/sudoers - # 或 - echo "cephdeploy ALL = (root) NOPASSWD:ALL" > /etc/sudoers.d/username - chmod 0400 /etc/sudoers.d/username - ``` +```bash +echo "username ALL = (root) NOPASSWD:ALL" >> /etc/sudoers +# 或 +echo "cephdeploy ALL = (root) NOPASSWD:ALL" > /etc/sudoers.d/username +chmod 0400 /etc/sudoers.d/username +``` ## 用户登陆操作记录 - 创建日志共存目录