Linux---shell基础知识

shell :使用shell来实现Linux的批量管理,而不是开发应用程序

shell 可以关联更好的第三方库

1、bash的基本特性:

       ctrl+l

       上键

       history

2、IO重定向与管道符

(1)IO重定向:改变默认位置

1、>标准的输出重定向:  

ls > /dev/pts/5 命令ls重定向输出至窗口5
  ls > /data/ls.out 命令ls重定向输出至/data/ls.out文件中
  注意:假如ls.out文件中本来就有内容,那么重定向输出后会覆盖文件中原有的内容

2、>>:追加重定向,新内容会追加至目标文件尾部  

ls >> /data/ls.out

3、():合并多个程序的标准输出

(cal 2007;cal 2008) > all.txt

4、2>标准错误的输出重定向:

cmd 2> /data/err.log cmd(本身无cmd这个命令,所以输入此命令会显示错误的结果)的错误结果重新定向显示至 data/err.log 中

注意history 2> /data/err.log 由于本身history命令是正确的,所以默认的输出设备会正常显示history命令的内容,且不会输出至/data/err.log中。原data/err.log中的文件会被空文件覆盖。
cmd 2>> /data/err.log 这样就会将正确的信息显示在默认的输出设备上,而且每次的错误信息输入至err.log文件中,方便后面研究问题

5、 < 标准输入重定向

cat < file  file文件内容输入到cat命令上

(2)管道符

管道(使用符号“|”表示)用来连接命令
命令1 | 命令2 | 命令3 | …

  • 将命令1的标准输出发送给命令2的STDIN,命令2的标准输出发送到命令3的STDIN
  • STDERR默认不能通过管道转发,可利用2>&1 或|& 实现
ls /data /err 2>&1 | tr 'a-z' 'A-Z'
ls /data /err |& tr 'a-z' 'A-Z' 

3、编程基础

       编程原理

程序:执行某个功能的一段代码

程序包含 = 指令(命令) + 数据(变量) + (逻辑关系)

4、grep和正则表达式:

       Linux三剑客:grep、sed、awk

       patten“模式“

5、语句的逻辑关系

分支:

if

case:*利用case实现编写Linux的启动脚本*

循环:

       for:放入for循环的列表

       while:满足判断条件为True时做循环---不要进入死循环

       until:满足判断条件为False时做循环----/

break:跳出循环

continue:打断本次循环,继续下次循环

exit  :退出当前程序,指定程序的返回值

read : 输入

echo:输出

Linux三剑客:

  sed:流编辑器

    两种模式的切换

       awk:

              主要做 报告生成器、是一个独立的编程语言

       grep:过滤

函数:

       一段固定功能的代码块

数组:

      

字符串:

       字符串处理

 练习

1、判断/etc/inittab文件是否大于100行,如果大于,则显示“/etc/inittab/ is a big file.”否则显示“/etc/inittab is amall file.”

#!/bin/bash

#

Line = `wc -l /etc/inittab | cut -d’ ‘ -f1

if [ $Line -gt 100];then

       echo “/etc/inittab/ is a big file.”

else

       echo“/etc/inittab/ is a smal file.”

fi

1、bash的基本特性:   

a)       命令展开:

date命令—— 基于date命令创建命令

date:查看系统时钟

查看硬件时钟:       clock 、hwclock  常常同步系统时钟与硬件时钟

cal 查看日历

date +%F  :改变date输出的格式为 2019-08-05  

date +%F-%H-%M-%S 输出为:2019-08-05-14-29-15 =年-月-日-时-分-秒

%F = CCYY-mm-dd

%H = hh

%M = MM

%S = ss

%T = hh:MM:ss

%D = mm/dd/YY

       练习:通过for语句循环创建一个月的日志文件(2019-08-06.http.log)

              # 或者touch `date +%F`.http.log

for i in {1..30};do

                     touch `date +%Y-%m-$i`.http.log;done

              Linux的目录需要遵循的规则:FHS目录规则

              { } :扩展  例如 cp /etc/inittab /etc/inittab.bak == cp /etc/{etc/inittab,/etc/inittab.bak}

             

              tar:归档工具—可以对目录进行操作

                     压缩工具:gzip、bzip2、xz   压缩只能对文件进行操作,不能对目录操作

                     zcat  查看压缩文件且不解压

tar的常见参数:

                            -j 对应压缩工具bzip2

                            -J 对应压缩工具 xz

                            -z 对应压缩工具 gzip

                            -c  压缩

                            -x  解压   可以不用指定解压的工具

                            -f  指定文件名

                            -v  显示详细信息

                            -C  指定解压的目录

                            -t   不解压查看内容,与zcat相同

              例子:tar cjvf 2018-08.http.log.bz2  2018-08*.http.log  压缩

                            tar  xvf 2018-08.http.log.bz2  -C /abc/  解压

              练习:编写脚本,每天02:20备份/etc目录中的所有文件,名称为当天日期;且保存文件为压缩文件;

                     crontab  ----  020 2 * * *  bash /root/xxx.sh

                     vim xxx.sh

                            #!/bin/bash

                            #

                            tar  cJvf /var/`date +%F`.xz  /etc

b)      命令历史:

作用:查看之间使用的命令

关于命令历史的文件:.bash_history  — 在root里,专门存放命令历史,在关机的时候会自动写入一次(可以利用history -a的命令将内存中的命令存入.bash_history中)

关于命令历史的变量(环境变量):PATH是环境变量的一种

---环境变量如何查看:env

---查看更详细的环境变量:set

              history的常见操作:

                     1、感叹号+编号(!n):查看命令历史

                     2、感叹号+字符串(!String):匹配最近一次的字符串

                     3、感叹号+感叹号(!!):上一条命令

                     4、感叹号+$(!$):上一条命令的最后一个参数 快捷键ESC+.的功能相同

              常见选项:

                     -a:添加

                     -d:删除

                     -c:清空

                     #:显示最近#行的命令

c)       命令补全:tab键   在开发环境中 \t 代表四个空格

  1. 提示
  2. 自动补全

d)      目录补全:tab键

  1. 提示
  2. 自动补全

e)       命令的执行状态

在Linux中,每一条命令的执行后都会有两个结果:

       命令本身放回的内容

       其次,命令执行的结果状态

$? 变量,就是用来存放命令执行状态的变量

       0 表示成功状态(和python相反)

       1~255 表示失败状态

f)        命令的快捷键

ctrl + l 清屏

ctrl +c 结束进程

ctrl +u 删除光标前的字符

ctrl +k 删除光标后的字符

ctrl +a 光标跳到头

ctrl +e 光标跳到尾

ctrl +w 以空格为分隔符去删除文件

ctrl +r 搜索最近一次进入交互界面使用的命令(要输入字符串)

g)      alias别名

系统启动是读取一些特殊文件的顺序

alias cdnet=”cd /etc/sysconfig/network-scripts/”   只能在当前shell执行

              全局配置文件

/etc/profile 定义环境变量(所有用户)最先读取这个文件

/etc/bashrc 定义本地变量,一般用来设置本地变量(所有用户)

个人配置文件(在用户的家目录下写入的)

~/.bash_profile 定义环境变量(指定用户)

~/.bashrc  定义本地变量---alias(指定用户)

              sources /etc/profile  或者 . /etc/profile   使文件生效

h)      文件通配符 globbing

文件通配符不是正则表达式

?任意单个字符

              * 任意长度的任意字符

[ ] 指定范围内的任意一个字符

^     [^ ]指定范围以外的任意一个字符    [^0-9A-Za-z]

指定字符类: 调用的时候在加一个 [ ]

       [:alnum:] 字母+数字

       [:alpha:] 字母

       [:upper:] 大写字母

       [:lower:] 小写字母

       [:digit:] 数字

       [:punct:] 表示特殊字符

       [:space:] 空格    ^[[:space:]]*$ 有空格键的空行

猜你喜欢

转载自www.cnblogs.com/gxnihao/p/11310739.html