文章目录

一、初始shell

(1)什么是shell?

(2)什么是变量?

(3)程序和进程的区别?

二、语言

(1)计算能理解的语言是什么呢 ?

(2)什么是编程?

(3)低级语言

(4)高级语言

(5)语言总结

三、Shell 定义

(1)shell的含义

(2) Shell 在Linux中的存在形式

(3)Shell 如何执行用户的指令

四、Shell 分类

五、Shell 适用场景

六、Bash 初始化

(1)什么是变量?

(2)什么是环境变量?

(3)Bash 环境变量文件的加载

为什么叫用户登录脚本?

(4)变量文件的分类

编写脚本 添加账户zhangsan,


一、初始shell

我们其实每天都在用shell,每天都打开一个终端,在终端里敲命令,终端和shell是两码事。

终端是虚拟终端 ,打开终端的同时会开启一个shell,shell是一个程序,平时敲的都是英文,那些英文计算机本身是不能直接认识它的,因为内核认识的是c语言的代码,最终硬件执行的时候还会变成0和1,从敲命令的那一刻开始,内核根本不知道敲了什么。找bash翻译一下。bash 是一种具体的shell 平时说的shell是统称,  bash当作一个翻译,把那些命令(ls,cd)翻译成c语言代码,传给内核,内核再把代码解析,最终硬件执行的是0和1。

平时打开终端的时候,前面展示出来的都是bash的东西,叫做环境变量,环境变量就是bash的一部分,平时敲的命令如果放在一个文件里执行就是脚本。但是跟人类进行交互的命令不能写在shell脚本里。比如passwd    vim  ,非交互式命令 可以直接写到shell脚本里面

(1)什么是shell?

是一个命令解释器。(解释给内核) shell本身也是程序  只要打开终端就会带着一个shell,平时敲的命令都是由shell解释的,并不是由终端解释的。终端只是存放shell的一个载体。就是我们需要一个物件来开一个shell,真正解释命令的是shell。

(2)什么是变量?

比如:要添加100个账户,名字是user1,user2,--user100。得手写到100,这里面唯一变化的是数字,假如数字能自动从1变到100就好了,只需要用一个变量来存储这些数字,让他们自动添加。

循环

判断

函数 保存功能

数组(不重要)(c语言里重要)

(3)程序和进程的区别?

程序是静态的, 本质是文件

进程是动态的,是程序运行起来之后的呈现。

二、语言

(1)计算能理解的语言是什么呢 ?

计算机只能理解2进制,0101010...,总不能人肉输入一堆二进制给计算机(虽然最原始的计算机就是这么干的)让它工作吧,这样开发速度太慢了。所以最好的办法就是人输入简单的指令,计算机能把指令转成二进制进行执行。

(2)什么是编程?

它就是一个缩写,全称叫做编写程序,用编程语言编写程序文件。编程 是个动词,编程==写代码,写代码为了什么? 为了让计算机干你想要干的事情

从低到高排序的

(3)低级语言

纸袋   (最开始的时候  把0和1输给计算机用纸条看见打孔的给1没打给0 后来出现汇编)

汇编   (它能简单的把人类想要表达的0和1稍微快点的输入计算机,把想要表达的语言写到纸袋里)然后就有了c语言。

(4)高级语言   

编译型   

 写源代码--编译--执行     (写好的源代码是不能执行的需要编译成可执行文件)先编译才能运行

C语言    c语言开始,就属于高级语言了很容易被看懂  比如 if ,c语言之后c++

C++    (面向对象)

(平时需要编译安装的源码包文件不可能是脚本因为脚本不需要编译)不需要提前编译

面向对象的语言

Java

解释性 (或称脚本语言)   事先不需要编译

写源代码—执行(编译)

perl

python

Php

shell (shell不是面向对象)

(5)语言总结

编程语言总体分以为:机器语言、汇编语言、高级语言

机器语言(0和1)

优点是最底层,速度最快,缺点是最复杂,开发效率最低

汇编语言

优点是比较底层,速度最快,缺点是复杂,开发效率最低

高级语言

编译型语言执行速度快,不依赖语言环境运行,跨平台差

解释型跨平台好,一份代码,到处使用,缺点是执行速度慢,依赖解释器运行

三、Shell 定义

硬件上装—os操作系统里装软件—app—

应用想和硬件打交道都是通过操作系统交互的,有一种app叫shell(只是各种app的一大类,shell也是app,负责人和计算机操作系统交互的)shell有很多种,平时用的都是bash。

(1)shell的含义

首先Shell英文含义是“壳”;它是相对于内核来说的,因为它是建立在内核的基础上,面向于用户的一种表现形式,比如我们看到一个球,见到的是它的壳,而非核。Linux中的Shell,是指一个面向用户的命令接口,表现形式就是一个可以由用户录入的界面,这个界面也可以反馈运行信息.

(2) Shell 在Linux中的存在形式

由于Linux不同于Windows,Linux是内核与界面分离的,它可以脱离图形界面而单独运行,同样也可以在内核的基础上运行图形化的桌面。  这样,在Linux系统中,就出现了两种Shell表现形式,一种是在无图形界面下的终端运行环境下的Shell,另一种是桌面上运行的类似Windows 的MS-DOS运行窗口,前者我们一般习惯性地简称为终端,后者一般直接称为Shell。

(3)Shell 如何执行用户的指令

Shell有两种执行指令的方式

1.命令行

平时执行命令都是shell指令

2.脚本的方式

随便编写一个文件,只要写的是shell命令,就是脚本文件。平时在写shell脚本的时候,都会在后面写一个.sh,是给自己看的。

四、Shell 分类

shell是一个大类,里边有很多具体的shell,bash就是其中最重要的一个。99%的生涯要用bash,1%可能用小型机。Linux中默认的Shell是/bin/bash,流行的Shell有ash、bash、ksh、csh、zsh等,不同的Shell都有自己的特点以及用途。

1、Bash

大多数Linux系统默认使用的Shell,bash Shell是Bourne Shell 的一个免费版本,它是最早的Unix Shell,bash还有一个特点,可以通过help命令 来查看帮助。包含的功能几乎可以涵盖Shell所具有的功能,所以一般的Shell脚本都会指定它为执行路径。

2、Csh

C Shell 使用的是“类C”语法,csh是具有C语言风格的一种Shell,其内部命令有52个,较为庞大。目前使用的并不多,已经被/bin/tcsh所取代

3、Ksh

Korn Shell 的语法与Bourne Shell相同,同时具备了C Shell的易用特点。许多安装脚本都使用ksh,ksh 有42条内部命令,与bash相比有一定的限制性

4、TCsh

tcsh是csh的增强版,与C Shell完全兼容。

5、Sh

是一个快捷方式,已经被/bin/bash所取代。

6、Nologin

指用户不能登录

7、Zsh

目前Linux里最庞大的一种 zsh。它有84个内部命令,使用起来也比较复杂。一般情况下,不会使用该Shell。在终端输入zsh直接就进去了,家目录在外面。exit退出。

五、Shell 适用场景

系统管理,自动化运维系统管理

在你的操作系统中所有非交互式的操作shell全都能干

  1. 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略...)
  2. 自动化批量软件部署程序 (LAMP,LNMP,Tomcat,LVS,Nginx)
  3. 应用管理程序 (KVM,集群管理扩容,MySQL,DELLR720批量RAID)
  4. 日志分析处理程序(PV, UV, 200, !200, top 100, grep/awk)
  5. 自动化备份恢复程序(MySQL完全备份/增量 + Crond)
  6. 自动化管理程序(批量远程修改密码,软件升级,配置更新)
  7. 自动化信息采集及监控程序(收集系统/应 用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)
  8. 配合Zabbix信息采集(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)
  9. 自动化扩容(增加云主机-->业务上线)
  10. Zabbix监控CPU 80%+|-50% Python API AWS/EC2(增加/删除云主机) + Shell Script(业务上线)
  11. 俄罗斯方块,打印三角形,打印圣诞树,打印五角星,运行小火车,坦克大战,排序算法实现
  12. Shell可以做任何事(一切取决于业务需求)

六、Bash 初始化

(1)什么是变量?

变量名称=值

变量本身有名字,需要给它赋一个值=,=右边就是赋值给变量的值,将来想用值的时候,直接用变量的名称就可以了。

例如:打印5, 可以 echo 5

假装shell脚本里有好多5,写了一个脚本,

vim a.sh

echo 5

echo hello5

cd /etc5

好多命令都带个5,想把5修改成6。假如5在脚本里出现了100次,就要找到这100个5很难。可以先把5赋值给一个变量,变量的名字现在随便起。

var=5

echo $var

echo hello $var

cd /etc$var

$在shell里是取变量值的符号,在变量前面加一个$,就表示我要使用它的值,将来要想去改5,就不用一个一个去找到改5了,有一万个也只需改一次。就改成var=6就可以了。

(2)什么是环境变量?

环境变量也是变量的一种,只不过是把类分的更细了一点。修饰用户工作环境的变量,简称环境变量。为什么是用户的工作环境?因为是在终端上操作,终端就是我的工作环境。

有没有环境变量系统都能工作,都能去操作系统,有了环境变量更方便一点,比如:想知道主机名是什么,一扫就知道了。

比如:  [root@localhost ~]#  就是放在一个变量里面,格式就是放在PS1的变量里。

格式:PS1  取它的值$ 打印echo

[root@localhost ~]# echo $PS1
[\u@\h \W]\$
这个变量里专门存的格式,是系统已经定义好的。改一改

主机名去了只留用户名 因为有特殊字符用单引号引起来, 因为它是变量,它的值想让他显示什么就什么   exit  退出

(3)Bash 环境变量文件的加载

/etc/profile       使用范围:所有账户

/etc/bashrc      使用范围:所有账户

~/.bashrc         使用范围:~所代表的账户

~/.bash_profile 使用范围:~所代表的账户   vi .bash_profile

这四个文件是用来初始化环境变量的,也叫用户登录脚本,其实都是脚本文件。

为什么叫用户登录脚本?

就是用户在登录操作系统的时候就会去读这四个文件,它一读就会去执行文件里的内容,如果里面要是有变量,它就会让它生效。

(4)变量文件的分类

这四个文件的名字,路径需要记住。怎么记?给它分类。

一、

etc下的两个文件,对所有用户生效。不管是谁登到系统里来,都会读这两个文件。

家目录下的两个文件,只对当前登录账户生效。

二、登录shell和非登录shell

login shell
    用户登录的时候需要输入用户名
nologin shell
    用户登录的时候不需要输入用户

例如 用快捷键去打开一个终端,是登陆了一个用户,并没有书写用户的名字就登录了。  还有另一种叫su - root  su的时候输写了用户的名字,这就是两种不同的登录shell。需要输入用户名字就叫做登录shell  不需要输入用户名字就叫非登录shell。

登录shell和非登录shell  读取的文件是不一样的。

登录shell和非登录shell   在读取登录脚本时是不一样的。

这4个文件  也叫系统初始化文件 (初始化就是操作系统起来的时候预先设置好的一些设置)如果要是有一些环境变量的值,需要预先设置好,就可以在这些文件里操作。

比如:想让用户登录的时候就有abc它的值是10000,echo $abc这个变量原来是不存在的,想让它在用户登录的时候就生效,把这个设置放在配置文件里,vim /etc/profile,在配置文件下面写 abc=10000  保存一下,就可以重启操作系统了或者source /etc/profile(立即生效),就可以看到abc是有值的。

系统里面很多变量,尤其是修饰环境的变量,都是放在这四个文件里设置的。比如:历史命令

历史命令最多能存储1000条命令。  为什么是1000?

因为1000就是一个变量里面的值,他也是一个环境变量 在vim/etc/profile

:HISTSIZE=1000 就是一变量环境变量,之所以能存储1000条历史命令 就是因为变量里面写到初始化文件里配置好了。

这一块可以写任何想要写的命令,前提是非交互式的,不一定是设置变量  系统配这个东西就是让我们设置变量的。

这两个文件也可以了解了解

~/.bash_logout 家目录下的隐藏文件ls -a   是在退出账户时执行的命令 在里面写个东西,它退出的时候就会执行。一般不会去动它。vi .bash_logout

vim .bash_history 历史命令会记录在里面

编写脚本 添加账户zhangsan,

并给他设置密码脚本里不能出现交互式的命令

useradd zhangsan

echo 123 | passwd --stdin zhangsan

vim a.sh

useradd zhangsan

echo 123 | passwd --stdin zhangsan

chmod +x zhangsan

./a.ch

./执行        --stdin 设置123免密

【注意】少熬夜,多看书。

linux Shell入门相关推荐

  1. 【linux教程(一)】Linux shell入门

    1. linux shell简介 2. bash shell基础命令 3. linux shell的一些基本知识 4. shell变量和传递参数 5. linux中的文件权限 6. linux中的ro ...

  2. linux shell 输出到数据库,linux shell 入门

    利用vi等文本编辑器编写Shell脚本的格式是固定的,如下: Yourcommandsgohere chmod+xfilename.sh 下面我们从经典的"helloworld"入 ...

  3. linux shell 入门学习笔记3 shebang

    shebang 计算机程序中,shebang指的是出现在文本文件的第一行前两个字符#! 在Unix系统中,程序会分析shebang后面的内容,作为解释器的指令,例如 以#!/bin/sh 开头的文件, ...

  4. Linux Shell脚本入门--wget 命令用法详解

    Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...

  5. linux Shell(脚本)编程入门实例讲解详解

    linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集, ...

  6. Linux Shell脚本入门教程系列之(十六) Shell输入输出重定向

    本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...

  7. Linux Shell脚本入门教程系列之(十五) Shell函数简介

    本文是Linux Shell脚本系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 上一篇之后,函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰 ...

  8. Linux Shell脚本入门教程系列之(十四) Shell Select教程

    本文是Linux Shell脚本系列教程的第(十四)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 在上一篇文章:Linux Shell系列教程之(十三)Shell分支语句 ...

  9. Linux Shell脚本入门教程系列之(十三)Shell分支语句case … esac教程

    本文是Linux Shell脚本系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 上一篇之 后,分支语句非常实用,基本上高级语言都支持分支语句(pytho ...

  10. Linux Shell脚本入门教程系列之(十二)Shell until循环

    本文是Linux Shell脚本系列教程的第(十二)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 在上两篇文章Linux Shell系列教程之(十)Shell for循环 ...

最新文章

  1. echarts 折线图悬停拐点大小不变_echarts-折线图(折线虚实/颜色与拐点样式修改)...
  2. springboot集成shiro实现注册、登录、退出功能
  3. .NET 6 中的 LINQ 更新
  4. 剑指offer-面试题6.重建二叉树
  5. java排序学习笔记
  6. Javascript的基础语法(标识符/变量)
  7. 深度学习——夏侯南溪关注的深度学习任务
  8. 致命车祸进展:Uber无人车检测到了行人,但选择了忽略
  9. 20120510,OSPF第三部分
  10. Seaborn学习笔记4
  11. oracle12c新特点之可插拔数据库(Pluggable Database,PDB)
  12. extjs中rowEditing动态编辑
  13. Python【map、reduce、filter】内置函数使用说明(转载)
  14. 商业智能在医疗卫生领域的应用
  15. 资源隔离的两种虚拟化技术——虚拟机容器 容器技术的资源隔离
  16. Spring AOP Introductions
  17. 使用Euclid算法求最大公约数
  18. 全球制造业“看上去很美”
  19. 以太坊 solidity msg对象
  20. C语言hannoi汉诺塔

热门文章

  1. MATLAB实现多元正态Copula分布
  2. 微信小程序;AI智能配音助手
  3. 软件专业大学生常用的刷题、找答案、找资源的网站
  4. 响应式个人简历网页源代码
  5. (C语言)用C语言编写小游戏——扫雷
  6. 快速查找文件的神器Listary
  7. jdk帮助文档 JDK1.8 JDK14
  8. R-WipeClean(磁盘清理工具)v20.0.2230绿色版
  9. matlab 匹配滤波相位谱,信号检测与估计知识点总结(2)
  10. 国家计算机二级c语言考试试题,国家计算机二级c语言考试试题题库