鸟书shell 学习笔记(一) shell专注于概念和命令
变量
variableName=value
- 等号左右不能有空格
- 变量内容有空格须要用"或者'括起来,可是 v="hello $name" $保持原有功能,单引號则不行,v="hello '$name'"纯文本
- 可用转义符\将特殊字符转成普通文本 `命令`,$(命令) ,在文本中提供命令运行信息
- 变量累加, name=xiaoyi ; name=$name:'welcome to hz'
- 子进程可以继承父进程的环境变量可是不可以继承父进程的自己定义变量,export 变量名;将自己定义变量变成环境变量
从键盘读入数据:
read -p '提示语' -t num v # num 时间,v 变量名
数组的申明和使用:
v[1]='hello';v[2]='xiao'
echo ${v[1]}
路径与命令的查找顺序
- 以相对/绝对路径运行命令,如/bin/ls
- 由alias找到该命令来运行
- 由bash内置的命令运行
- 通过$PATH这个变量的顺序找到第一个命令来运行
读取shell配置文件的命令
source 或者就是一个点 . , 因为.bashrc仅仅能在登陆的时候才会被读,假设中途改动了想马上生效的话,我们就须要调用source命令读取当前改动的对应配置文件
eg: source ~/.bashrc equals . ~/.bashrc
管道命令
场景: 当数据须要经过几次处理之后才干到我们想要的格式的时候
管道之后第一个数据一定是能够接受standard input的命令
选取命令:cut,grep
- cut
cut 按行为单位切出来 cut -d '切割字符' -f fields ,主要是用于行数据的切割显示
cut -c 字符范围
eg:
echo $PATH | cut -d ':' -f 5 //选取path中以:切割的第五个路径
cut -c 字符范围
eg:
echo $PATH | cut -d ':' -f 5 //选取path中以:切割的第五个路径
- grep
grep 将一行信息中我们想要的数据分析出来
grep [-acinv] [--color=auto] '查找字符串' filename
-a 将binary文件以 text的方式查找数据
-c 统计匹配到的数据个数
-i 忽略大写和小写
-n 输出行号
-v 输出没有匹配内容的那一行
-a 将binary文件以 text的方式查找数据
-c 统计匹配到的数据个数
-i 忽略大写和小写
-n 输出行号
-v 输出没有匹配内容的那一行
grep能够结合正则表达使用
排序与统计命令 sort ,wc ,uniq
- sort
sort [-fbMnrtuk] [file or stdin]
-f 忽略大写和小写
-b 忽略最前面的空格
-M 以月份的名字排序
-n 使用纯数字排序
-r 反向排序
-u 同样的数据项仅出现一项
-t 分隔符
-k 以以那个区间进行排序
eg:
cat /etc/passwd | sort -t ':' -k 1 //对以: 切割的第一列排序
- wc 统计字, 行或者字符数
wc [-lwm]
-l 行数
-w 字数
-m 字符数
eg:
cat /etc/profile | wc -lwm
- uniq 反复的数据竟出现一次就可以
uniq [-ic]
-i 忽略大写和小写
-c 进行计数
eg:
last | cut -d ' ' -f1 | grep '^xiaoyi' | uniq -c
字符转换指令 tr, col, join, paste, expand
- tr : tr [-ds] set1
-d 删除信息其中的set1字段
-s 替换掉反复的字符
eg : 小写换大写 last | tr 'a-z' 'A-Z'
find ./ -name "*.java" | xargs wc -l
find grep 讲的比較好的链接: http://www.cnblogs.com/skynet/archive/2010/12/25/1916873.html
特殊符号: