linux shell 学习

linux shell学习之算术:

$(()) 是一个整体,可以把 (a+1)*2 这样的算术式放进整体里边

如$(( (a+1)*2 ))

 

linux shell学习之退出脚本:

退出状态 $?

 

ps aux 查看历史操作

 

 

<<< 即 EOF的缩写

cat <<< hello 将命令输出到控制台

image

 

 

 

基础命令2

tac

 

常用命令

env 查看环境变量

  1: XDG_SESSION_ID=1
  2: SHELL=/bin/bash
  3: TERM=xterm
  4: SSH_CLIENT=192.168.56.101 57753 22
  5: SSH_TTY=/dev/pts/12
  6: USER=root
  7: 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/games
  9: MAIL=/var/mail/root
 10: QT_QPA_PLATFORMTHEME=appmenu-qt5
 11: PWD=/
 12: LANG=zh_CN.UTF-8
 13: HOME=/root
 14: SHLVL=2
 15: LANGUAGE=zh_CN:
 17: SSH_CONNECTION=192.168.56.101 57753 192.168.56.102 22
 18: LESSOPEN=| /usr/bin/lesspipe %s
 19: XDG_RUNTIME_DIR=/run/user/1000
 20: LESSCLOSE=/usr/bin/lesspipe %s %s
 21: _=/usr/bin/env
 22: 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 忽略大小写

 

image

排序命令: 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 '\*'

你可能感兴趣的:(linux shell 学习)