Bash 学习笔记

文章目录

Bash 的工作控制

%%%+ 可调用 jobs 里面现在的工作,%- 调用前一个工作

%n 将工作编号为 n 的进程置于前台来执行 == fg %n

%?s1 调用程序名称中含有s1的工作,? 表示搜寻

%./s1 找出进程名开头是 ./s1 的工作

C-z 暂停进程,然后 bg 丢到后台 == 指令 &

disown %n:移除工作

Bash 的历史指令

!-n :执行倒数第n个命令

!! :执行前一个你是指令

! 字符串:执行最近一个含有以‘字符串’开头的历史命令

!?字符串? :执行最近一个含有‘字符串’的历史指令

!# :目前所键入的字符串

!!:$ :取得前一个命令的最后一个参数

!ls:1 :找出最近一个以ls开头的指令的第一个参数,^第一个,*所有参数,

!!:3-5 :找出前一个指令中,介于字符串3到5的参数

!!:s/字符串1/字符串2/ :将前一个指令中的字符串1替换为字符串2

!!:h :删除后面的文件名

!!:t :删除前面的目录

!!:p :显示前面的指令,但不执行。

Bash 数组用法

定义数组:a=(1 2 3 4 5) , a=(1 [4]=4 5 ) 可以不连续,不连续的地方为空。

获取值:${a[index]}

获取所有元素:${a[@]} 返回数字1 2 3 4 5${a[*]}返回"1 2 3 4 5"

获取元素个数:${#a[@]}, ${#a[*]}

调整 Bash 变量的属性为 readonly

readonly 变量名

readonly、readonly -p :显示只读属性的变量列表

readonly -f 函数名

readonly -a 数组名readonly -a s; s[3]=10

declare -r 变量名

declare用法

  • -p 显示变量属性
  • -a 变量是数组
  • -f 搜寻命令只找函数
  • -i 变量是一个整数
  • -F 显示所有函数式名称及其属性
  • -r 设定只读变量
  • -t 设立变量具有trace属性
  • -x 设为环境变量

Bash 高级变量用法

变量

  • ${变量名}
  • $(命令)
  • ${待测变量:-替换值} :判断变量是否不存在或者为空(冒号),成立则返回替换值
  • ${待测变量:=替换值} :判断变量是否不存在或者为空(冒号),成立则赋值为替换值
  • ${待测变量:?错误信息} :判断变量是否不存在或者为空(冒号),成立则赋值为替换值
  • ${待测变量:+替换值} :判断变量是否存在或者非空(冒号),成立则返回替换值

切片

  • ${变量:位置起始点}
  • ${变量:位置起始点:长度}

取部分位置参数

  • ${@:1}

计算字符串长度

  • ${#str}
  • expr length "字符串"

对比样式,删除相符的

  • ${变量#样式}:由前面开始,最短删除
  • ${变量##样式}:由前面开始,最长删除
  • ${变量%样式}:由后面开始,最短删除
  • ${变量%%样式}:由后面开始,最长删除

取代或删除部分字符串

  • 只替换第一个符合的:${变量/样式/替换字符串}
  • 替换全部符合的:${变量//样式/替换字符串}
  • 只匹配行首:${变量/#样式/替换字符串}
  • 只匹配行末:${变量/%样式/替换字符串}
  • 删除:不加替换字符串表示删除

列出指定字符串开头的变量名列表

${!开头字符串@}, ${!开头字符串*}

数组索引列表

${!数组变量[@]}, ${!数组变量[*]}

算术拓展

  • $((算术式))
  • expr 算术式
  • $[算术式]
  • declare -i 变量=算术式
  • let 算术式

算术式中如果值不存在或者为空,则默认为0

不同进制的数字可使用“基底#数字”表示

let 表达式加空格必须为表达式加引号

let "i = i + 5"

查找文件中的关键字

grep -q "keyword" filename

返回命令结果的相反值

! 空格 命令

[ 判断式 ] && 指令1 || 指令2 等价于 A?B:C

[[ ]](()) 中表达式不用转义符

高级样式

  • @(样式串行) :如果符合括号里样式串行的其中一个就算对比符合
  • !(样式串行) :只要不出现在括号中就算对比符合

eg:

    read name
    case $name in
          j@(ay|oin|uly|oe) echo "good";;
          *) echo "nice";;
    esac

常用 shell 命令

杀死僵尸进程:

kill -HUP $(ps -A -ostat,ppid | awk '/[zZ]/{print $2}')

也可以看看


全国大流量卡免费领

19元月租ㆍ超值优惠ㆍ长期套餐ㆍ免费包邮ㆍ官方正品