学习shell脚本之前的基础知识

来源:互联网 发布:历史股价数据 编辑:程序博客网 时间:2024/05/17 01:55

概述:

《跟阿铭学linux》

1、什么是shell

默认安装的shell叫做bash

1.1记录命令历史

1.1.1 !!连续两个!表示执行上一条指令:


1.1.2  !n 这里的n是数字,表示执行命令历史中第n条指令,例如!1002表示执行命令历史中第1002个命令


1.1.3 !字符串(字符串大于等于1),例如!pw表示执行命令历史中最近一次以‘pw’为开头的指令


1.2. 指令和文件名补全

按tab键,按两次把所有匹配文件或命令显示出来。

1.3. 别名(起个小名)

命令:alias

语法:alias 命令别名=‘具体的命令’


1.4、通配符

*来匹配零个或多个字符,而用?匹配一个字符


1.5、输入输出重定向

echo 'hello' > 1.txt (将hello输入到1.txt文件中, >>表示追加,>表示覆盖)

1.6、管道符

“|” ,把前面的命令运行结果丢给后面的命令

1.7、作业控制

暂停Ctrl+z ,使用fg命令恢复它, bg命令后台运行。 Ctrl+c表示终止。


如果关闭停止的工作,首先恢复工作(fg 编码) 然后ctrl+c结束任务, 或者找到pid,然后kill



2、变量

所有的环境变量 env

2.1 环境变量


  • 1、PATH决定了shell将到那些目录中寻找命令或程序
  • 2、HOME当前用户主目录
  • 3、HISTSIZE:历史记录数
  • 4、LOGNAME:当前登录用户名
  • 5、HOSTNAME: 主机的名称
  • 6、SHELL:当前用户shell类型
  • 7、LANG语言相关的环境变量
  • 8、MAIL:当前用户的右键存放目录
  • 9、PWD:当前目录

2.2 set(所有变量,包含用户自定义变量)


2.2.1 要想系统内所有用户登录后都能使用该变量

需要在"/etc/profile" 文件最末尾行加入 export 变量名=变量值

例如

echo export myname=jack >> /etc/profile


2.2.2.只想让当前用户使用该变量

需要在用户目录下的.bashrc文件最后一行加入 export 变量名=变量值,然后运行 source .bashrc就可以生效了



pstree 打印进程


取消变量:unset 变量名


3、系统环境变量与个人环境变量的配置文件

/etc/profile: 文件预设的系统变量,例如PATH,USER等等

/etc/bashrc: 这个文件主要预设umask以及PS1:就是命令前字符串


.bash_profile: 定义了用户的个人化路径与环境变量的文件名称,当用户登录时,该文件仅仅执行一次。

.bashrc: 该文件包含专用于你的shell的bash信息,当登录时以及每次打开新的shell都会被读取。

.bash_history: 记录命令历史用的

.bash_logout:当退出shell时,会执行该文件,可以把一些清理的工作放到这个文件中

4、linux shell中的特殊符号

1、*代表零个或多个任意字符(正则表达式)

2、?只代表一个任意字符(正则表达式)

3、#这个符号在linux中表示注释说明的意思,即#后面的内容linux忽略掉

4、\表示转移字符,表示本意例如\\表示一个“\”

5、|管道符 ,前面结果输出到后面的命令中


命令:cut(用来截取某个字段)

-d:后面跟分隔字符,分隔字符要用单引号括起来

-c:后面接的是第几个字符

-f: 后面接的是第几个区块


使用-c参数


命令:sort(排序)

-t分隔符:作用跟cut的-d一个意思

-n: 使用纯数字排序

-r : 反向排序

-u : 去重复

-kn1,n2:由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序


命令:wc

用于统计文档的行数、字符数、词数,常用的选项

-l : 统计行数

-m: 统计字符数

-w:统计词数

[root@iz8vb7cc5e91muwr6fxp3jz ~]# wc /etc/passwd  30   58 1470 /etc/passwd[root@iz8vb7cc5e91muwr6fxp3jz ~]# wc -l /etc/passwd30 /etc/passwd[root@iz8vb7cc5e91muwr6fxp3jz ~]# wc -m /etc/passwd1470 /etc/passwd[root@iz8vb7cc5e91muwr6fxp3jz ~]# wc -w /etc/passwd58 /etc/passwd
行数为:30,词数:58, 字符数:1470

命令:uniq (去重复行)

-c : 统计重复行数,并把行数写在前面

111122223333444422224444

[root@iz8vb7cc5e91muwr6fxp3jz test]# vim test.txt[root@iz8vb7cc5e91muwr6fxp3jz test]# uniq test.txt111122223333444422224444[root@iz8vb7cc5e91muwr6fxp3jz test]# sort test.txt|uniq1111222233334444[root@iz8vb7cc5e91muwr6fxp3jz test]# sort test.txt|uniq -c      1 1111      2 2222      1 3333      2 4444

命令:tee (类似 重定向“>”,但是它还可显示到控制台)

[root@iz8vb7cc5e91muwr6fxp3jz test]# echo "efefe" | tee test.txtefefe[root@iz8vb7cc5e91muwr6fxp3jz test]# cat test.txtefefe
命令:tr (替换字符,常用来处理文档中出现的特殊符号)

-d :删除某个字符,-d后面跟要删除的字符

-s: 把重复的字符去掉

最常用的就是把小写变大写: tr '[a-z]' '[A-Z]'

[root@iz8vb7cc5e91muwr6fxp3jz test]# head -n2 /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin[root@iz8vb7cc5e91muwr6fxp3jz test]# head -n2 /etc/passwd|tr '[a-z]' '[A-Z]'ROOT:X:0:0:ROOT:/ROOT:/BIN/BASHBIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN[root@iz8vb7cc5e91muwr6fxp3jz test]# head -n2 /etc/passwd|tr 'r' 'R'Root:x:0:0:Root:/Root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin[root@iz8vb7cc5e91muwr6fxp3jz test]# head -n2 /etc/passwd|tr -d 'r'oot:x:0:0:oot:/oot:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin[root@iz8vb7cc5e91muwr6fxp3jz test]# head -n2 /etc/passwd|tr -s 'r'root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin

命令:split (切割文档)

-b : 依据大小来分割文档,单位为byte

-l :依据行数来分割文档

[root@iz8vb7cc5e91muwr6fxp3jz test]# cp /etc/passwd /test[root@iz8vb7cc5e91muwr6fxp3jz test]# lltotal 28drwxr-xr-x 2 root root  4096 Aug 18 19:27 apache2-rw-r--r-- 1 root root  1470 Aug 26 15:57 passwddrwxr-xr-x 2 root root  4096 Aug 17 20:23 test4-rw-r--r-- 1 root root 10240 Aug 17 20:25 test4.tar-rw-r--r-- 1 root root     6 Aug 26 15:47 test.txt[root@iz8vb7cc5e91muwr6fxp3jz test]# split -b500 passwd[root@iz8vb7cc5e91muwr6fxp3jz test]# lsapache2  passwd  test4  test4.tar  test.txt  xaa  xab  xac[root@iz8vb7cc5e91muwr6fxp3jz test]# split -b500 passwd 100[root@iz8vb7cc5e91muwr6fxp3jz test]# ls100aa  100ab  100ac  apache2  passwd  test4  test4.tar  test.txt  xaa  xab  xac[root@iz8vb7cc5e91muwr6fxp3jz test]# rm -f 100a*[root@iz8vb7cc5e91muwr6fxp3jz test]# split -l10 passwd[root@iz8vb7cc5e91muwr6fxp3jz test]# wc -l *wc: apache2: Is a directory      0 apache2     30 passwdwc: test4: Is a directory      0 test4      1 test4.tar      1 test.txt     10 xaa     10 xab     10 xac     62 total

split -b500 passwd   将 文件passwd以500字节分割

split -l10 passwd   将文件passwd以10行分割

6、$除了用于变量前面的标识符外,还有一个妙用,就是和“!”结合起来使用


7、; 分号,一行执行多条命令


8、~:用户的home目录,如果是root 则是/root 普通用户则是/home/username(对应用户名)


9、& :如果想把一条命令放到后台执行的话,则需要加上这个符号,通常用于命令运行时间非常长的情况


10、>, >> ,2>, 2>>   单个>表示替换, 两个>>表示追加   2表示错误信息重定向


11、[] 中括号,中间为字符组合,代表中间字符中的任意一个。


12、 && 与 ||  (类似java的短路运算符)

1. command1 ; command2
2. command1 && command2
3. command1 || command2
使用'';'' 时,不管command1是否执行成功都会执行command2;
使用``&&'' 时,只有command1执行成功后,command2才会执行,否则command2不执行;
使用``||'' 时,command1执行成功后command2 不执行,否则去执行command2,总之command1和
command2总有一条命令会执行。

以上引用《跟阿铭学Linux》

原创粉丝点击