shell

  1. 定义:
  • 命令语言解释器,翻译命令给内核,内核转交给CPU执行
  • 用户/内核间的接口程序
  • 无论GUI/CLI,一切输入先由shell解释再传给内核
  1. bash shell

shell的版本有sh、bash、csh、ksh等
其中bash是Linux世界使用最广泛的shell,也是很多Linux发行版的默认shell

  1. 获取当前系统可用shell
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
  1. 查看当前使用的shell
[root@localhost ~]# echo $SHELL
/bin/bash

5.CLI:

Command Line Interface(命令行接口)

GUI:

Graphical User Interface(图形用户接口)

标准输入

缺省是终端键盘,所谓缺省,即系统默认状态

标准输出

缺省是终端屏幕,至于终端这个概念,你就简单理解为显示器加键盘吧

标准错误输出

缺省是终端屏幕

执行一条shell命令,就会打开这三个文件,可以理解为三条管道,
标准输入与键盘相连,
标准输出和标准错误输出都默认与屏幕相连
没有特别指明的情况下,我们通过键盘输入的内容通过“标准输入”这条管道“流入”至相应的命令,命令的执行结果又会通过“标准输出”或“标准错误输出”这条管道“流出”至屏幕,展现在我们面前

# 将"hello"添加到test.txt这个文件中,如果不存在就创建
[root@localhost ~]# echo "hello" > test.txt   
# 输出test.txt文件内容
[root@localhost ~]# cat test.txt
hello    #标准输出
  1. 重定向
    比如一条命令cat test.txt,它会把test.txt这个文件的内容输出到屏幕上,但我不想输出到屏幕上,我想保存到一个文件里,就可以用”标准输出重定向“符号>将其重定向到某个文件cat test.txt > temp.txt,这样屏幕上就没有输出,也就改变了标准输出的流出方向,故而称之为”重定向“
    1 >又称为”覆盖重定向“,就是说会覆盖输出文件原先的内容List item
    2 >>被称为”追加重定向“,也就是说不会覆盖输出文件的内容,而是把输出追加到原内容的后面
    3 <被称为”标准输入重定向“,一般命令的标准输入都是键盘,用了<,其标准输入就变成其后的文件了。比如,cat本身就能够以文件作为其标准输入,但我们也可以利用<来将文件变成其标准输入:cat < test.txt
    4 前面又说了,所谓的标准输入、标准输出以及标准错误输出其实都是文件,是文件就会有文件描述符,就像人的名字一样,不然内核哪知道哪个文件是哪个文件啊。
    5 标准输入的文件描述符是0,标准输出是1,标准错误输出是2。所以,如果我们想把cat test.txt的标准输出重定向到stdout.txt,其标准错误输出重定向到stderr.txt,可以这样做:cat test.txt 1> stdout.txt 2> stderr.txt,0和1一般都可以省略。
    6 如何把标准错误输出与标准输出重定向到同一个文件?还是上面的例子:cat test.txt > temp.txt 2>&1。还有一种方式是不区分标准错误输出与标准输出,统统重定向到同一个文件:cat test.txt &> temp.txt
  2. 什么是管道
    例子:
[root@localhost ~]# echo “zhangsan” | useradd
# 这条命令的意思是输出”zhangsan“,并利用useradd命令添加其为linux普通用户
# ”zhangsan“为管道前的标准输出,管道将其变成后面useradd命令的标准输入

管道只能处理前一个命令的标准输出,标准错误输出无法处理
管道后面的命令必须能够接受标准输入才行,像ls命令就不接受标准输入,所以它不能放在管道后面。
ls命令的作用是列举目录下的内容,当然了,在linux世界怎么能接受不能呢,利用xargs就可以把管道前的标准输出当作ls命令的标准输入了

[root@localhost ~]# echo "/etc"| xargs ls
# 没有xargs的话,这里的ls只能列举当前目录的内容,而非/etc这个目录
  1. 什么是shell脚本?
    shell是一个命令语言解释器。
    shell本身也是一个程序,有自己的命令,像什么ls、cd、pwd等都是其内置命令,还有一些其他命令,都是别人为linux添加的基本命令。
    我们知道,编程时通过各种库调用来实现功能,而shell没有库,他通过调用各种命令来实现相应功能。
    我们通过输入各种命令与shell交互,但有时我们不想手动输入各种命令,我们想把命令存在一个文件中,然后让shell执行该文件中的命令,于是就有了shell脚本。
    所谓的shell脚本其实就是一个包含一系列shell命令的文本,目的是减少重复工作,实现自动化。
  2. shell脚本基本组件
    shell脚本是由各种shell命令组成,但绝对不是简单的命令堆积,它像其他编程语言一样,有自己的基本组件。
  • shell命令
    • shell内部命令,如ls、cd、pwd等
  • 其他命令
    • who、du、free等各种丰富的功能命令
  • 数据结构
    • 变量、数组、字典
  • 函数
    -将一系列命令组合成一个函数,减少重复工作
  • 控制流
    • if、case等分支语句
      for、while等循环语句
  1. 如何快速编写一个脚本?
    三部分组成:脚本声明,注释,可执行语句
  • 脚本声明

CPU只能执行二进制文件
脚本是文本文件,需要shell解释,shell本身是二进制文件
CPU运行shell程序,shell解释脚本的每一行内容,然后找到对应的二进制程序,由CPU执行
首先我们得告诉CPU,该脚本用哪个解释器来解释
声明:在脚本第一行顶格写:#!/bin/bash
#!被称为shebang符号,用来声明所使用的解释器,一旦执行某个脚本,CPU看到第一行,就会去执行该解释器,再由解释器去找对应的命令程序
/bin/bash指明bash二进制程序的位置

  • 注释

解释器会忽略注释

  • 可执行语句

linux命令以及相应的控制流与数据结构
条件判断,shell if语法或shell case语法
需要重复执行某命令,就搜shell for循环或shell while循环

  1. 一个批量ping ip脚本
    先说一个命令,检测网络通不通,需要用到ping命令,我们想批量检测某一个网段的主机是否网络通畅,那就需要用到for循环
#linux中默认编辑器通常是vi或vim,该文本编辑器分为三种模式
#默认是普通模式(无法输入内容,但可以通过相应命令操作文本),普通模式下按i表示进入插入模式(可以插入内容了)
#按:表示进入命令行模式(批量操作文本),在插入模式或命令行模式下按ESC进入普通模式。输入ZZ或:wq退出vim编辑器
[root@localhost ~]# vim ping.sh
 #默认进入普通模式,先按i开始编写脚本,下面是脚本完整内容
 
 #!/bin/bash
 NET=192.168.1    #声明一个变量并赋值
 for i in {1..254}    #后面的{1..254}表示循环范围从1-254,如果你就是想测试下,这里就改成{1..10}吧
 do
 IP=$NET.$i    #字符拼接并赋值给IP这个变量
 ping -c 3 $IP &> /dev/null    
 #-c指明发包次数,&> /dev/null表示无论正确输出还是错误输出统统丢弃
 #$?表示上条命令的执行结果,0表示成功,非0表示失败
 #-eq代表”是否等于“,[]是条件测试语法,测试条件左右必须各留至少一个空格
 if [ $? -eq 0 ];then    
     echo "$IP is up" 
 else 
     echo "$IP is down"
 fi
 done
 # 编写完毕,按ECS进入普通模式,然后输入:wq退出vim编辑器
  1. 执行脚本主要有三种方法:
  • 直接运行脚本文件
    • 这种方法需要脚本有可执行权限:chmod u+x ping.sh
    • 然后输入脚本的绝对路径或相对路径来执行文件
    • 比如相对路径,你得先进入脚本所在的目录,然后执行:./ping.sh
  • 利用解释器执行
  • 利用source或.
# 假如你想把执行结果保存到一个文件,也就会利用输出重定向
# 但同时你又想输出其结果到屏幕上,那就会用到tee命令了
[root@localhost ~]# bash ping.sh | tee out.txt
192.168.1.1 is up
192.168.1.2 is down
...

#现在你想知道有多少个ip是通的,这就用到涉及文本过滤命令grep以及统计命令wc
[root@localhost ~]# grep "up" out.txt | wc -l
   3

参照:https://mp.weixin.qq.com/s/CrCRCUMw4ZB2-zDE0MY94w

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值