Shell杂谈
常用内容小记
- echo 输出
- readonly 标记只读变量
- unset 删除变量
- 单引号
- 单引号中变量无效,内部字符原样输出;
- 单引号字符串中不能出现单独的一个单引号,即便使用了转义字符,但可以成对出现
- 双引号
- 双引号里可以有变量;
- 双引号里可以出现转义字符
- 提取子字符串:${string:1:4} 从位置1(第二个位置)开始截取4个字符
- 查找子字符串:
expr index "$string" io
查找字符i或o的位置,哪个先出现就计算哪个 - 数组:
- 定义 array1=(value0 value1) 赋值 array1[0]=value3 读取 ${array1[n]}
- 获取所有元素 echo ${array_name[@]}
- 注释: 单行# 多行:<<EOF xxxx EOF 或 :<<’ xxxx ‘ 或 :<<! xxxx !
- 关系运算符 只支持数字或值为数字的字符串-eq -ne -gt -lt -ge -le
- 布尔运算符 ! -o -a
- 逻辑运算符 && ||
- 字符串运算符 = != -z -n $
- 文件测试运算符 -r file 检查file是否可读 等等……
- echo 输出
- 显示命令执行结果,使用反引号 `
- 单引号包括的字符串会原样输出,没有转义
- printf 输出
- test用于检查某个条件是否成立,可以进行 数值、字符、文件 三个方面的测试
- if then elif then else 常与test结合使用
- for var in item1 item2; do command1; command2; done;
- Let 执行表达式 let “int++”
- case esac
- 函数 funname(){}
- 函数参数
- $10不能获取第10个参数,要用${10}
- $#参数个数;
- $*以一个单字符串显示所有向脚本传递的参数;
- $$脚本运行的当前进行ID号;
- $!后台运行的最后一个进程ID号
- $@与$*相同,但是使用时加引号,并在引号中返回各个参数
- $-显示Shell使用的当前选项,与set命令功能相同
- $? 显示最后命令的退出状态。0表示没有错误,其他值表示有错误;$?仅对上一条指令负责,一旦函数返回后没有立即保存入参数,那么其返回值将不能再通过$?获得。
- 输出重定向: > ; 输出以追加的方式重定向: >> ; 输出文件m与n合并 n >& m ;
awk
一种处理文本文件的语言,强大的文本分析工具。主要用于行处理。
grep 更适合单纯的查找或匹配文本
sed 更适合编辑匹配到的文本
awk 更适合格式化文本,对文本进行较复杂格式处理
基本用法
1 |
|
例子:
1 |
|
1 |
|
变量
除了 $+数字
表示某个字段,awk还提供其他一些变量。常用的有NF和NR。
变量NF
表示当前行有多少个字段,因此$NF
就代表最后一个字段。
1 |
|
变量NR
表示当前处理的是第几行。
1 |
|
其他变量如:
FILENAME
:当前文件名FS
:字段分隔符,默认是空格和制表符。RS
:行分隔符,用于分割每一行,默认是换行符。OFS
:输出字段的分隔符,用于打印时分隔字段,默认为空格。ORS
:输出记录的分隔符,用于打印时分隔记录,默认为换行符。OFMT
:数字输出的格式,默认为%.6g
。
函数
awk 还提供了一些方便的内置函数。
toupper()
:字符转为大写。tolower()
:字符转为小写。length()
:返回字符串长度。substr()
:返回子字符串。sin()
:正弦。cos()
:余弦。sqrt()
:平方根。rand()
:随机数。
条件
awk允许指定输出条件,只输出符合条件的行。
1 |
|
例子:
1 |
|
if 语句
awk提供了if结构,用于编写复杂的条件。if结构还可以指定else部分。
1 |
|
wget
(Coming soon……)
curl
(Coming soon……)
find
(Coming soon……)
grep
(Coming soon……)
Reference
Shell杂谈
http://bingcs.com/2021/06/16/learning-shell/