特殊符号
;
: 表示命令结束,接着执行下一条,exp: clear;ls -l&&
: command1 && command2 --> 如果command1执行成功,则继续运行command2||
: command1 || command2 --> 如果command1 执行失败,则继续执行command2~
: 波浪线会自动扩展成当前用户的主目录?
: 代表任意字符,不包括空字符。 grep ?.log*
: 代表任意数量的字符,包括0 个字符[...]
:匹配括号内任意一个字符 ls [ab].txt --> 匹配a.txt b.txt[^..]/[!..]
: 表示匹配不包括括号内的字符[a-z]
{..}
: 表示分别扩展成大括号里面的所有值,各个值是由逗号分割 echo {1,2,3} 1 2 3 == echo 1;echo 2; echo3{a..z}
: 快捷写法, 表示{a,b,c,d…z} 可用于循环遍历 for i in {1…100} 如果写错了,识别不到,原样输出echo {a..c}-{1..3} => a1 a2 a3 b1 b2 b3 c1 c2 c3
关于转义
: echo $‘it’s’Here 文档
:格式: << $NAME … $NAME 多行字符串输入,NAME 随便起名字,收尾对应即可
cat << token
ll
ll
ll
token
$?
: 表示上一个命令的退出码,0表示成功,非0执行失败$$
: 表示当前shell的进程ID echo $$$0
: 脚本文件名$1-$9
: 对应脚本第一个到第九个参数$#
:参数的总数$@
全部的参数,使用空格分隔$*
:全部的参数,参数之间使用变量$IFS
值第一个字符分割,默认为空$_
: 表示上一个命令的最后一个参数$-
: 当前shell 的启动参数${#varname}
:获取字符串长度的语法匹配问题
:
${variable#pattern} # 删除最短匹配,返回剩余部分--非贪婪匹配 #变成 % 从尾部开始
${variable##pattern} # 删除最长匹配,返回剩余部分--贪婪匹配 ## 变成 %% 从尾部开始
phone="555-456-1414"
echo ${phone#*-} # 456-1414
echo ${phone##*-} # 1414
# 如果要将头部匹配的部分替换成其他内容
${variable/#pattern/string}
foo=JPG.JPG
echo ${foo/#JPG/jpg} # jpg.JPG
{varname^^}
: 全部转换成大写{varname,,}
: 全部转换成小写((...))
: 可以进行整数的算术运算, 会忽略空格。 ((1+1)). 不返回运算结果,只要返回不是0,即执行成功 ((3-3)) 执行失败, $((2+2)) 提取值
判断符号
- -eq 等于
- -ne 不等于
- -gt 大于
- -lt 小于
- -ge 大于等于
- -le 小于等于
快捷键
Ctrl + k:剪切光标位置到行尾的文本。
Ctrl + u:剪切光标位置到行首的文本
Ctrl + y:在光标位置粘贴文本。
脚本入门
#!/bin/bash
#!/usr/bin/env NAME
# 该行作用指定默认解释器 否则执行脚本需要 /bin/bash script.sh
# sh文件需要加上执行权限 chmod +x *.sh
#!/usr/bin/env NAME
这个语法的意思是,让 Shell 查找$PATH
环境变量里面第一个匹配的NAME
。如果你不知道某个命令的具体路径,或者希望兼容其他用户的机器,这样的写法就很有用。