linux shell学习之算术:
$(()) 是一个整体,可以把 (a+1)*2 这样的算术式放进整体里边
如$(( (a+1)*2 ))
linux shell学习之退出脚本:
退出状态 $?
ps aux 查看历史操作
<<< 即 EOF的缩写
cat <<< hello 将命令输出到控制台
基础命令2
tac
常用命令
env 查看环境变量
1: XDG_SESSION_ID=12: SHELL=/bin/bash3: TERM=xterm4: SSH_CLIENT=192.168.56.101 57753 225: SSH_TTY=/dev/pts/126: USER=root7: LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
8: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games9: MAIL=/var/mail/root10: QT_QPA_PLATFORMTHEME=appmenu-qt511: PWD=/12: LANG=zh_CN.UTF-813: HOME=/root14: SHLVL=215: LANGUAGE=zh_CN:17: SSH_CONNECTION=192.168.56.101 57753 192.168.56.102 2218: LESSOPEN=| /usr/bin/lesspipe %s19: XDG_RUNTIME_DIR=/run/user/100020: LESSCLOSE=/usr/bin/lesspipe %s %s21: _=/usr/bin/env22: OLDPWD=/home/lee/lijiandong/shelltest
echo $HOME 查看变量名
export $HOME = “内容” 编辑环境变量
alias 别名
alias lm='ls -al'
type 内建命令
type ls 看ls是不是内建命令
set 观察所有变量
export 自定义变量转环境变量
locale 语系变量
declare 声明环境变量
4.查找文件
4.1 find
find / -name 'i18n' -type d 查找目录:find /(查找范围) -name '查找关键字' -type d
find / -name 'i18n' -type f 查找文件:find /(查找范围) -name '查找关键字' -type f
http://blog.csdn.net/windone0109/article/details/2817792
4.2 whereis
找数据库【updatedb可以更新数据库】
4.3 locate
找数据库
6.管道命令
6.1 选取命令 cut, grep
cut 【subString】以符号分隔 –d:
cut –d ‘:’-f 5 以:分隔并选取第5个
cut –d ‘:’-f 5- 以:分隔并选取第5个及之后的
cut –d ‘:’-f 3,5 以:分隔并选取第3、5个
cut 以字符长度分隔 -c:
cut –c 12- 筛选从第12开始往后取完所有的
grep
last | grep ‘root’--color=auto 列举登陆用户并找出有root的一行
dmesg | grep -n -A3 -B2 --color=auto 'eth' 顺带显示在每个搜索结果的前2行与后3行
-v 反向选择
-i 忽略大小写
排序命令: sort, wc, uniq
sort【sort】 xxx.txt 对文件中的内容进行首字母升序排序
主要:
-u 去重
-f 忽略大小写
-n 对数字做处理
-r 倒序
-t 以什么分隔列
次要:
-k[num] 对哪一行进行排序
sort –u xxx.txt 排序时去重
sort –rn –k1 user.citycode 对第一行的数字做倒序处理
sort -t ' ' -k3r -k2 facbook.txt
sort -t ' ' -k 3nr -k 2n facbook.txt 先按第三行数字降序,再按第二行数字升序排列
sort -t ' ' -k 1.2 facbook.txt 按照第二个字母进行排列
http://blog.sina.com.cn/s/blog_a56ef5490101dh9i.html
uniq【group by】
sort | unit -c 排序后去重,并记录重复的次数
wc【count】 统计 行,字,词
tee 双向重导向
last | tee test.txt | grep reboot 1.将登陆用户信息输出到test.txt文件中,并且屏幕显示找出来包含reboot的行
字符转换命令 tr, col, join, paste, expand
tr【replaceAll】 删除或者替换
-d 删除
tr ‘[a-z]’ ‘[A-Z]’ 将小写替换成大写
tr –d ‘:’删除所有:
join【】根据相同字符的位置将两者拼接起来
paste 将两个文件的内容根据tab连接起来
paste 1.txt 2.txt
expand 将 tab转换成自定义的间距
root@lee1:/home/lee/lijiandong/shelltest/niaoge/unit11# cat expand.txt -A
aaaaaa^Ibbbb1$
b1^Ic1$
ddd2^Iv5$
dddddddd8^Ib2$
root@lee1:/home/lee/lijiandong/shelltest/niaoge/unit11# expand expand.txt -t6
aaaaaa bbbb1
b1 c1
ddd2 v5
dddddddd8 b2
root@lee1:/home/lee/lijiandong/shelltest/niaoge/unit11# expand expand.txt -t8
aaaaaa bbbb1
b1 c1
ddd2 v5
dddddddd8 b2
root@lee1:/home/lee/lijiandong/shelltest/niaoge/unit11# expand expand.txt -t1
aaaaaa bbbb1
b1 c1
ddd2 v5
dddddddd8 b2
root@lee1:/home/lee/lijiandong/shelltest/niaoge/unit11# expand expand.txt -t8
aaaaaa bbbb1
b1 c1
ddd2 v5
dddddddd8 b2
spite 将一个大文件分割文件若干个小文件
split -b 1k linux.sql linux.sqlxx 可将1k修改自定义的文件大小
cat linux.sqlxx* >> linux.sql 将分割后的文件合并
ls -al / | split -l 2 - split.line 将输出的内容每两行写到一个文件中
12 正则表达式
特殊符号
代表意义
[:alnum:]
代表英文大小写字节及数字,亦即 0-9, A-Z, a-z
[:alpha:]
代表任何英文大小写字节,亦即 A-Z, a-z
[:blank:]
代表空白键与 [Tab] 按键两者
[:cntrl:]
代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等
[:digit:]
代表数字而已,亦即 0-9
[:graph:]
除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键
[:lower:]
代表小写字节,亦即 a-z
[:print:]
代表任何可以被列印出来的字节
[:punct:]
代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $...
[:upper:]
代表大写字节,亦即 A-Z
[:space:]
任何会产生空白的字节,包括空白键, [Tab], CR 等等
[:xdigit:]
代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字节
grep -n 't[ae]st' regular_express.txt []里边的只代表其中一个
grep -n 'oo' regular_express.txt 包含oo的行
grep -n '[^g]oo' regular_express.txt 00前面不包含g
grep -n '[^a-z]oo' regular_express.txt 前面不能有小写
grep -n '[^[:lower:]]oo' regular_express.txt
grep -n '[0-9]' regular_express.txt 包含数字
grep -n '[[:digit:]]' regular_express.txt
grep -n '^[^a-zA-Z]' regular_express.txt 开头不是英文字母
grep -n '^[^[:alpha:]]' regular_express.txt
【注意】^在括号内与括号外的含义不一样,内代表非,外代表定位行首
grep -n '\.$' regular_express.txt 显示以.结尾的行
grep -n '^$' regular_express.txt 显示空白行
.任意字节 *重复字节
.*出现若干个字节
grep -v '^$' /etc/systemd/logind.conf | grep -v '^#' 不是空白行,也不是#开头
grep -n 'g..d' regular_express.txt .代表任意一个字符
grep -n 'go*' regular_express.txt 至少有一个以上的字符
grep -n 'g.*g' regular_express.txt g与g之间有0个或任意个字符
grep -n '[0-9][0-9]*' regular_express.txt 任意数字,[0-9]也可以
总结:
^word 行首
word$ 行尾
. 任意一个
\ 转义
* 重复之前一个
[list] 集合中的一个
[n1-n2] 字节范围
[^list] 不包含集合中的
\{n,m\} 连续几个前一个字符
grep -n 'go\{2,3\}' regular_express.txt 连续2-3个o
grep -n 'go\{3\}' regular_express.txt 连续3个o
grep -n 'go\{3,\}' regular_express.txt 连续3个以上的o
nl regular_express.txt | sed '1,3d' 删除1到3行
nl regular_express.txt | sed '3,$d' 删除3到最后一行
nl /etc/passwd | sed '2a \ndrink tea\nadsfa' 在第2行后新起一行添加
nl /etc/passwd | sed '2,5c 1111111111111111111' 替换,将2到5行用111..11替换(先删除后新增)
nl /etc/passwd | sed -n '5,7p' 截取5-7行输出
对内容进行操作
/sbin/ifconfig eth0 | grep 'inet' | sed 's/^.*地址://g' 将地址:前的所有字符替换掉 ‘s/要被替代的内容/新的字串/g’
/sbin/ifconfig eth0 | grep 'inet 地址' | sed 's/^.*地址://g' | sed 's/掩码.*//g'
cat /etc/manpath.config | grep 'MAN' | sed 's/#.*$//g' | sed '/^$/d' 将注释变成空白行,将空白行去掉
sed -i 's/\.$/\!/g' regular_express.txt 将文件内容中的结尾的.改成!
sed 's/[[:space:]]//g' 去掉所有空格
延展性管道
grep -v '^$' regular_express.txt | grep -v '^#' 去除空白行和注释行
用延展性管道:egrep -v '^$|^#' regular_express.txt
egrep -n 'go+d' regular_express.txt 搜索g及一个以上o及d的字符串
egrep -n 'go?d' regular_express.txt 搜索g及0个或1个的o及d的字符串
egrep -n 'g(la|oo)d' regular_express.txt 搜索群组,包含 g跟 la或oo 跟d的字符串
echo 'AxyzxyzxyzxyzxyzC' | egrep 'A(xyz)+C' 查找A 跟xyz组合一个以上 跟C
grep -n '[!>]' regular_express.txt 查找包含!或>的
printf '%s\t %s\t %s\t %s\t %s\t \n' $(cat printf.txt) 按自定义的格式输出
printf '%10s\t %5s\t %5s\t %5s\t %8.2f\t \n' $(cat printf.txt)
last -n 5 | awk '{print $1 "\t" $3}' 截取第1行和第3行,用tab分隔
last -n 5 | awk '{print $1 "\t line: " NR " \t columns: " NF}' 截取第一行,并在每行跟上 NR第几行 NF该行总列数
cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t" $3}' 从第二行开始取,:分隔,第三列<10,输出第一行 \t 第三行
cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t" $3}' 从第一行开始取,同上
cat pay.txt | awk '{if(NR==1) printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"}
NR>=2{total = $2 + $3 + $4
printf "%10s %10d %10d %10d %10.2f\n", $1, $2, $3, $4, total}'
按格式输出
sed -e 's/\(^ *\)//' 去掉首行空格
cat /etc/passwd | sed -e '4d' -e '6c no six line' > passwd.new 动作用-e区分,先删除第4行,再将第6行正行替换
diff passwd.old passwd.new 比较两个文件异同,以【行】为单位
4d3 <==左边第四行被删除 (d) 掉了,基准是右边的第三行 < adm:x:3:4:adm:/var/adm:/sbin/nologin <==这边列出左边(<)文件被删除的那一行内容 6c5 <==左边文件的第六行被取代 (c) 成右边文件的第五行 < sync:x:5:0:sync:/sbin:/bin/sync <==左边(<)文件第六行内容 --- > no six line <==右边(>)文件第五行内容
cmp passwd.old passwd.new 比较两个文件异同,以【位组】为单位
passwd.old passwd.new 不同:第 120 字节,第 4 行
grep '\*' /etc/* 只查一层
grep /etc/* $(find /etc -type f) 查整个目录
grep '\*' $(find / -type f) 查整个硬盘
find / -type f | xargs -n 10 grep '\*'