【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门

From Zero To Hero

课程文档连接:百度网盘https://pan.baidu.com/s/1ZD8LdV9UJrLAmEwdt4jg9w
提取码:3k3q

【如果觉得本文有收获请点个赞八】

【零基础】一文穿起linux结构、Bash指令、shell编程入门

  • 学习笔记
  • 入门-Linux
    • 文件结构与内容
    • Vi和Vim编辑器
      • Vi打开文件【黑白电视】
      • Vim打开文件【彩色电视】
      • 一般模式
      • 编辑模式
      • 指令模式
      • 总结文本编辑
    • Linux运行级别
    • 关机重启的顺序和语法
    • 帮助文档
    • 常用快捷键总结
  • 文件目录类指令
    • pwd 显示当前工作目录的绝对路径
      • cd 时的绝对路径和相对路径
    • 创建多层目录
    • 防止误删的 rmdir
    • 创建文件
    • 复制和复制时覆盖
    • mv两个功能
    • cat查看内容【小文件】
    • more 查看内容【大文件】
    • less 查看内容【超大文件】
    • echo 输出内容到指示台
    • head显示文件头部内容
    • tail显示文件尾部内容
    • >覆盖和>>追加
    • ln软连接【类似快捷方式】
      • 软连接闪烁说明内容已经丢失
    • rm移除文件或目录
    • history查看已经执行过的命令
  • 用户群组管理
  • 文件权限类操作
    • 文件权限编号
      • 硬链接和软连接的区别
    • chmod权限管理
        • bash和自执行的权限不同
    • 改变所有者
  • 搜索查询类
    • find
    • grep匹配和管道符|配合ls列出文件夹内容参数
      • 管道符 |
    • which查找命令
  • 压缩和解压缩类指令
    • gzip(注意不会保留源文件,且不能用于目录)压缩为.gz文件
    • zip和unzip(注意unzip的指定解压路径)
    • tar打包
  • 磁盘分区类指令
  • 进程控制类命令
    • ps查看进程
    • kill终止进程
    • pstree查看进程树
    • top显示系统健康状态【查看僵尸进程、利用率】
    • netstat查看网络端口占用
    • crontab创建定时任务
    • RPM软件包以及YUM仓库
      • rpm -qa查询软件包
      • rpm -e卸载
      • rpm 安装
    • yum仓库【类似conda】
  • 入门-Shell编程
    • 查看系统支持的所有shell语言
    • 脚本入门
        • 开头
        • Hello world
      • 自执行权限
    • Shell 脚本变量
    • 自定义变量注意点
    • 特殊变量
    • 运算
    • 条件判断
    • 流程控制
      • if
        • 注意事项:
    • case
    • for 循环
  • 附录-虚拟机服务相关

学习笔记

本文记录了笔者的shell学习过程和leetcode的精选四题解法。
本笔记是尚硅谷视频的学习笔记,视频链接:https://www.bilibili.com/video/BV14a4y1e71S?p=4
内容较多,边看视频边写,花了四天才整理完,适合收藏作为突击资料,或视频的复习内容~ 文章内不好展示的地方标出了视频对应的时间节点

入门-Linux

文件结构与内容

Linux中一切皆文件,常见的结构如下
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第1张图片
下面介绍各个文件夹的作用:
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第2张图片
(lib: library放各种库)
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第3张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第4张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第5张图片

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第6张图片

Vi和Vim编辑器

Vim是在vi上进阶的一款编辑器,两者功能相同,都是类Unix系统中通用的文本编辑器,但vim还可以自动上色与判断逻辑

Vi打开文件【黑白电视】

vi install.log

Vim打开文件【彩色电视】

vim install.log

一般模式

使用vim打开一个文件后,自动进入“一般模式”,可以复制、黏贴、删除,但是不能插入或删除内容。复制删除等都有快捷键。

注意:shift+^快速移动到行头;shift+$快速移动到尾部。

编辑模式

按下 I A O R四个键中的一个,才会开启编辑模式
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第7张图片

指令模式

按下 : 或者 / 或者 ?,开启指令模式,光标移动到文本的最后一行
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第8张图片

补充 :wq 是保存并退出

总结文本编辑

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第9张图片

Linux运行级别

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第10张图片

关机重启的顺序和语法

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第11张图片
补充: shutdown -h 分钟 是xx分钟后关机,如

shutdown -h 7

则为7分钟后关机

帮助文档

man指令可以查看指令的帮助文档
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第12张图片

man ls

如果man现实不了,就用help查看shell内置命令

help cd

常用快捷键总结

  • Tab键可以补全代码,善用!
  • ctrl + L 清屏
  • 上下键查找已经执行过的指令

文件目录类指令

pwd 显示当前工作目录的绝对路径

cd 时的绝对路径和相对路径

讲到了绝对路径,介绍一下cd的逻辑

cd /桌面

则认为是绝对路径 : /桌面,因为第一个/已经指向了文件系统的最开始,一般正确写法是:

cd /root/桌面

相对路径则直接

cd 桌面/文件夹

创建多层目录

使用 -p 参数可以创建多层目录,如

mkdir first
mkdir first/second

两行等价于一行

mkdir -p first/second

防止误删的 rmdir

rmdir只能删除空文件夹
如文件夹内有内容,则执行失败

rmdir empty

创建文件

可以写路径

touch first/onefile.txt

复制和复制时覆盖

cp -r 递归复制整个文件夹

cp -r row new

row为原位置,new为新位置

强制覆盖 不提示: \cp

mv两个功能

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第13张图片

cat查看内容【小文件】

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第14张图片

more 查看内容【大文件】

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第15张图片

全屏显示

more onefile.config

less 查看内容【超大文件】

less和more基本相同,唯一区别的less在读写大文件时效率更高
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第16张图片

echo 输出内容到指示台

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第17张图片
例子:

echo -e "Hallow\tworld"
echo -e "Hallow \\ tworld"

若不空格可能无法显示转义后的 \

head显示文件头部内容

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第18张图片

tail显示文件尾部内容

监视文件变化可以用tail
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第19张图片

>覆盖和>>追加

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第20张图片

ln软连接【类似快捷方式】

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第21张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第22张图片
软连接效果示意:
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第23张图片

软连接闪烁说明内容已经丢失

rm移除文件或目录

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第24张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第25张图片
常用写法:

rm -rf deletefile.txt

history查看已经执行过的命令

直接

history

用户群组管理

这里直接贴图了
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第26张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第27张图片

效果:
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第28张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第29张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第30张图片
加了 - 之后多了 tangseng文件夹
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第31张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第32张图片

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第33张图片

文件权限类操作

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第34张图片

文件权限编号

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第35张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第36张图片

rxw对于目录和文件的意义是不同的
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第37张图片
例子:
详细解释在视频第4分钟
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第38张图片
连接数的含义:
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第39张图片

硬链接和软连接的区别

硬链接和软连接区别

软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块,因此软链接的创建与使用没有类似硬链接的诸多限制。

但需注意:软链接创建时原文件的路径指向使用绝对路径较好。使用相对路径创建的软链接被移动后该软链接文件将成为一个死链接(如下所示的软链接 a 使用了相对路径,因此不宜被移动),因为链接数据块中记录的亦是相对路径指向。

chmod权限管理

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第40张图片
关于mode=421法,详细解释在视频第4分钟
最常用的当然是

chmod 777 filenam

但是这样写是在是显示不出我们的能力。

实例:
在这里插入图片描述
所有者:第一个用户名 atguigu 权限 rw-
所属组:第二个用户名 atguigu 权限【正好是高亮部分】 rw-

其他人:只有读权限 r–

现在想给所有人用a.sh这个脚本:

chmod +x a.sh

运行结果
在这里插入图片描述
如果不想让陌生人有权限,则执行

chmod o-x a.sh

这样o组就没有x权限了:
在这里插入图片描述

bash和自执行的权限不同

只要Bash有执行脚本的权限,就能执行

bash a.sh

而运行该命令的用户不一定要有a.sh的x权限
但是自执行则一定要有x权限

./a.sh

注意,如果写自执行的脚本,首先应当注意是否指定了编译器
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第41张图片
即上图中的

#!/bin/bash

改变所有者

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第42张图片

搜索查询类

find

从指定目录开始逐步递归其所有子文件夹

格式: find 搜索范围 选项

选项:
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第43张图片

范例1:通过名称查找
在target文件夹下找所有的.txt文件

find target/ -name "*.txt"

范例2:通过所有者查找
在target文件夹下找所有拥有者为xiaoming的文件

find taget/ -user xiaoming

范例3:通过文件大小查找
查找所有target文件夹下大小超过200m的文件,注意find指令是以b为单位的

选项+n大于 -n小于 n 等于

find target/ -size +204800

grep匹配和管道符|配合ls列出文件夹内容参数

管道符 |

管道符号 | 表示将前一个指令结果输出给后一个指令处理。

  • ls 参数
    -a 表示显示所有文件,包含隐藏文件
    -d 表示显示目录自身的属性,而不是目录中的内容
    -F 选项会在显示目录条目时,在目录后加一个/
    字符串匹配查找,只输出符合条件的

  • 字符串匹配grep语法和re库相同, ^表示开头匹配相同,$表示结尾匹配相同

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第44张图片

  • 显示匹配行号
ls | grep -n test
  • 开头匹配:
ls -l | grep '^d'
drwxrwxr-x 2 roaddb roaddb 4096 May  7 10:11 111
drwxrwxr-x 2 roaddb roaddb 4096 Mar 13  2017 SSL_files
  • 结尾匹配
ls -F | grep '/$'
111/
SSL_files/

which查找命令

查找 “命令”在哪个文件夹下
查找ll命令在哪个文件夹:

which ll

压缩和解压缩类指令

gzip(注意不会保留源文件,且不能用于目录)压缩为.gz文件

gzip file
gunzip file.gz

gzip只能压缩文件,不能压缩目录

zip和unzip(注意unzip的指定解压路径)

注意zip要取名字才能压缩
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第45张图片

zip -r newname.zip file
unzip -d newfolder

tar打包

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第46张图片
压缩:-zcvf
解压:-zxvf

讲解在视频第9分钟

例子:

tar -zcvf dabao.tar.gz file1.txt file2.txt

解压缩【指定路径myfolder】

tar -zxcf dabao.tar.gz -C myfolder

磁盘分区类指令

不太用得到,视频

进程控制类命令

ps查看进程

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第47张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第48张图片
例子:

ps aux

内容说明
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第49张图片
实例讲解:视频第4分钟
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第50张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第51张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第52张图片

kill终止进程

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第53张图片
例子

kill -9 5103
killall firefox

pstree查看进程树

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第54张图片

例子

pstree -p
pstree -u

【感觉没啥用】进程树讲解在视频第九分钟

top显示系统健康状态【查看僵尸进程、利用率】

格式: top [指令]
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第55张图片
先输入top ,再在监视界面输入操作命令:
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第56张图片

netstat查看网络端口占用

在这里插入图片描述

如:查看端口是否被占用

netstat -nlp | grep 8888

crontab创建定时任务

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第57张图片

例子:
查询所有定时任务

crontab -l

打开定时任务的编辑界面(类似vim进去了)

crontab -e

编辑界面:
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第58张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第59张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第60张图片
注意不要同时设置几号和星期几
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第61张图片

在这里插入图片描述
详细讲解:视频第10分钟

RPM软件包以及YUM仓库

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第62张图片

rpm -qa查询软件包

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第63张图片
如查看firefox的安装包

rpm -qa | grep firefox

rpm -e卸载

注意:如果不检查依赖,其他用到的程序可能无法启动
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第64张图片
例子

rpm -r --nodeps firefox

rpm 安装

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第65张图片

yum仓库【类似conda】

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第66张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第67张图片

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第68张图片
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第69张图片
例子:yum安装firefox

yum -y install firefox.x86_64

类似conda,yum也要换成163源

入门-Shell编程

shell类似外层程序调用linux内核的中间阶段
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第70张图片
同样作为命令行解释器,python越来越有取代shell的趋势,后续刷题中也会介绍shell和puyhon的两种解法

查看系统支持的所有shell语言

cat /etc/shells

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第71张图片
每种都是不同的shell语言,bash兼容了难用的sh,因此出现多种语法和奇怪语法。

查看本机的默认shell语法:

echo $SHELL

在这里插入图片描述
centOS中,sh已经被软连接到bash
在这里插入图片描述

脚本入门

脚本(Script),是使用一种特定的描述性语言,依据一定的格式编写的可执行文件。在本文中,指命令行的集合。

开头

指定编译器,

#!/bin/bash

类似py的

#--*--coding: utf-8 --*--
Hello world

先touch test.sh, 再vim进去。写入:

#!/bin/bash
echo "Hello world"

就可以:
在这里插入图片描述

自执行权限

(在win的gitbash内没有权限问题)
自执行:

./test721.sh

在linux中无法运行,因为:
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第72张图片
所有者也没有x权限

但在gitbash里是默认有x权限的
在这里插入图片描述
具体修改权限设置请参照上文的chmod节,本部分专注于脚本语言本身。

只要Bash有执行脚本的权限,就能执行

bash a.sh

而运行该命令的用户不一定要有a.sh的x权限
但是自执行则一定要有x权限

./a.sh

注意,如果写自执行的脚本,首先应当注意是否指定了编译器
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第73张图片
即上图中的

#!/bin/bash

如果写错了,会报坏解释器interpreter
在这里插入图片描述
如果是python,则为

#!user/bin/python

即python解释器的位置

Shell 脚本变量

  • 所有变量都是字符串型,没有别的型
  • 想echo输出时,前面加上$符号
    如:
i=0
echo $i

也可以在命令行中直接写
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第74张图片
由于字符串特性,不能做加减操作
在这里插入图片描述
除了自己定义的变量,还有系统内自带的变量
如$USER
在这里插入图片描述

常用系统变量

$HOME、$PWD、$SHELL、$USER等

显示当前Shell中所有变量:

set

自定义变量注意点

1.基本语法
(1)定义变量:变量=值 【千万不能有空格!】
(2)撤销变量:unset 变量
(3)声明静态变量:readonly变量,注意:不能unset

readonly i=5

则不能重新赋值,也不能unset i

因为这个变量定义到了当前的shell里
可以新建一个ssh窗口,新建一个终端,都可以清除该变量。bash端口相当于一个占内存的程序,可以用

ps -ef

查看到bash进程

2.变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。

特殊变量

特殊变量:$n
1.基本语法
$n (功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 ${10}
2.案例实操
(1)输出该脚本文件名称、输入参数1和输入参数2 的值

[atguigu@hadoop101 datas]$ touch parameter.sh 
[atguigu@hadoop101 datas]$ vim parameter.sh

#!/bin/bash
echo "$0  $1   $2"

[atguigu@hadoop101 datas]$ chmod 777 parameter.sh

[atguigu@hadoop101 datas]$ ./parameter.sh cls  xz
./parameter.sh  cls   xz

4.4 特殊变量:$#
1.基本语法
$# (功能描述:获取所有输入参数个数,常用于循环)。
2.案例实操
(1)获取输入参数的个数

[atguigu@hadoop101 datas]$ vim parameter.sh

#!/bin/bash
echo "$0  $1   $2"
echo $#

[atguigu@hadoop101 datas]$ chmod 777 parameter.sh

[atguigu@hadoop101 datas]$ ./parameter.sh cls  xz
parameter.sh cls xz 
2

4.5 特殊变量:$*、$@
1.基本语法
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体

$@(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)

2.案例实操
(1)打印输入的所有参数

[atguigu@hadoop101 datas]$ vim parameter.sh

#!/bin/bash
echo "$0  $1   $2"
echo $#
echo $*
echo $@

[atguigu@hadoop101 datas]$ bash parameter.sh 1 2 3
parameter.sh  1   2
3
1 2 3
1 2 3

4.6 特殊变量:$?
1.基本语法
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
2.案例实操
(1)判断helloworld.sh脚本是否正确执行

[atguigu@hadoop101 datas]$ ./helloworld.sh 
hello world
[atguigu@hadoop101 datas]$ echo $?
0

如搭配逻辑运算

在这里插入图片描述

运算

基本语法
(1)

$((运算式))

或者

$[运算式]

(2)expr + , - , *, /, % 加,减,乘,除,取余
注意:expr运算符间要有空格

例子:
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第75张图片
另一种写法

在这里插入图片描述

第二种写法解释:expr是一个函数,后面都是参数,$a是一个,+是一个,$b是一个,所以要严格空格隔开

条件判断

  • 1.基本语法
    [ condition ](注意condition前后要有空格)

    [i=5]
    注意:条件非空即为true,[ atguigu ]返回true,[] 返回false。

查看返回值方法:

#?

【特殊符号,返回上一个脚本的结束符,0为正常运行,1为错误运行】
在这里插入图片描述

上图a和6不相等,返回1。下面的数值比较与之相同。要点:空格不能少

  • 2 常用判断条件
    • (1)两个整数之间比较
      = 字符串比较
      -lt 小于(less than) -le 小于等于(less equal)
      -eq 等于(equal) -gt 大于(greater than)
      -ge 大于等于(greater equal) -ne 不等于(Not equal)
    • (2)按照文件权限进行判断
      -r 有读的权限(read) -w 有写的权限(write)
      -x 有执行的权限(execute)
    • (3)按照文件类型进行判断
      -f 文件存在并且是一个常规的文件(file)
      -e 文件存在(existence) -d 文件存在并是一个目录(directory)

例子:

  • 数值判断
    在这里插入图片描述
  • 权限判断
    在这里插入图片描述

流程控制

重点:

fi封住if
esac封住case·

恰好是倒过来。

基本语法:

if

if [ 条件判断式 ];then 
  程序 
fi 

或者

if [ 条件判断式 ] 
  then 
    程序 
elif [ 条件判断式 ]
	then
		程序
else
	程序
fi
注意事项:

(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
例子:

【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第76张图片
注意结尾fi封住
效果:【注意参数不同了结果也不同】
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第77张图片

下面编写脚本:如果存在一个叫bbbb的文件,就输出内容,不存在就新建一个内容为123,名字为bbbb的文件:

#!/bin/bash
if [ -f  bbbb]
then
	cat bbbb
else
	touch bbbb
	echo b >> bbbb

case

重点:

  • 不写swich
  • ;;代表break
  • 单括号不扩死

例子:参数1输出1111,参数2输出2222,参数3输出3333

#!/bin/bash
case $l in
	"1")
	echo 111
	;;
	"2")
	echo 2222
	;;
	*)
	echo 3333
	;;
esac

效果:
【零基础】【万字长文】一文解决linux结构、Bash指令、shell编程入门_第78张图片

for 循环

基本语法1

for (( 初始值;循环控制条件;变量变化 )) 
  do 
    程序 
  done

附录-虚拟机服务相关

service iptables stop :临时关闭防火墙(service指令)
chkconfig iptables off :关闭开机自启防火墙(chkconfig指令)

虚拟机准备:


1. 防火墙关闭
    service iptables stop //服务关闭
    chkconfig iptables off //关闭开机自启
   
 
2. 创建一个一般用户atguigu
    useradd atguigu
    passwd atguigu
    

3. 在/opt目录下创建software module文件夹
    mkdir /opt/software /opt/module
    chown atguigu:atguigu /opt/software /opt/module


4. 把这个用户加到sudoers
    vim /etc/sudoers
    atguigu ALL=(ALL)       NOPASSWD: ALL
    :wq!强制保存



5. 改Hosts
    vim /etc/hosts
    在文件后追加

192.168.1.100   hadoop100
192.168.1.101   hadoop101
192.168.1.102  
hadoop102
192.168.1.103   hadoop103
192.168.1.104   hadoop104
192.168.1.105  
hadoop105
192.168.1.106   hadoop106
192.168.1.107   hadoop107
192.168.1.108   
hadoop108
192.168.1.109   hadoop109

    (每克隆一台都需要做一遍)

6. 改静态IP
    vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.2
DNS1=192.168.1.2
NAME=eth0

7. 改主机名
    vim /etc/sysconfig/network
    改HOSTNAME字段
    改成 HOSTNAME=hadoop100
拍快照


//新虚拟机,不用第八步  
8. 改网卡脚本文件
    vim /etc/udev/rules.d/70-persistent-net.rules
    第一行删掉
    
    第二行
    最后 NAME="eth1" 改成 NAME="eth0"

你可能感兴趣的:(Linux-ubuntu技巧,shell,linux,编程语言,运维,深度学习)