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

概述:

《跟阿铭学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/passwd
30 /etc/passwd
[root@iz8vb7cc5e91muwr6fxp3jz ~]# wc -m /etc/passwd
1470 /etc/passwd
[root@iz8vb7cc5e91muwr6fxp3jz ~]# wc -w /etc/passwd
58 /etc/passwd
行数为:30,词数:58, 字符数:1470

命令:uniq (去重复行)

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

1111
2222
3333
4444
2222
4444

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

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

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

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

-s: 把重复的字符去掉

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

[root@iz8vb7cc5e91muwr6fxp3jz test]# head -n2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin: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/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
[root@iz8vb7cc5e91muwr6fxp3jz test]# head -n2 /etc/passwd|tr 'r' 'R'
Root:x:0:0:Root:/Root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@iz8vb7cc5e91muwr6fxp3jz test]# head -n2 /etc/passwd|tr -d 'r'
oot:x:0:0:oot:/oot:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@iz8vb7cc5e91muwr6fxp3jz test]# head -n2 /etc/passwd|tr -s 'r'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

命令:split (切割文档)

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

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

[root@iz8vb7cc5e91muwr6fxp3jz test]# cp /etc/passwd /test
[root@iz8vb7cc5e91muwr6fxp3jz test]# ll
total 28
drwxr-xr-x 2 root root  4096 Aug 18 19:27 apache2
-rw-r--r-- 1 root root  1470 Aug 26 15:57 passwd
drwxr-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]# ls
apache2  passwd  test4  test4.tar  test.txt  xaa  xab  xac
[root@iz8vb7cc5e91muwr6fxp3jz test]# split -b500 passwd 100
[root@iz8vb7cc5e91muwr6fxp3jz test]# ls
100aa  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 passwd
wc: 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》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值