Linux开发基础笔记

目录

  • 0.说明
  • 1. Linux概述
    • 1.1 Linux的渊源及发展
    • 1.2 Linux的结构及文件系统类型
    • 1.3 Linux的文件属性及目录结构
    • 1.3 Linux的系统环境安装
    • 1.4 Linux的系统环境安装
  • 2、命令概述
    • 2.1 命令格式及帮助
  • 3、目录操作
    • 3.1 目录的路径概念
    • 3.2 目录操作
  • 4、文件操作
    • 4.1 文件显示及过滤
    • 4.2 文件增删及拷贝
    • 4.3 文本编辑器的基础编辑
    • 4.4 文本编辑器的高级编辑
  • 5.文件压缩和归档
    • 5.1 文件基础归档和压缩
    • 5.2 7z压缩及库归档
  • 6.设备挂载、软件包升级与安装
    • 6.1 挂载和卸载概念
    • 6.2 设备挂载及卸载
    • 6.3 软件包升级
  • 7.进程管理
    • 7.1 进程查看
    • 7.2 进程控制
  • 8.系统管理
    • 8.1 简单系统操作
    • 8.2 计划任务
    • 8.3 内存状态查看
    • 8.4 磁盘分区
  • 9.网络连接及地址查看
    • 9.1 网络连接及地址查看
    • 9.2 域名解析
    • 9.3 路由及网络统计查看
  • 10.用户管理
    • 10.1 用户增删与查看
    • 10.2 用户切换
    • 10.3 用户账户配置
  • 11.用户组管理
    • 11.1 用户组增删与查看
    • 11.2 用户组账户配置
  • 12.文件权限属性
    • 12.1 文件权限的概念
    • 12.2 文件权限设置
    • 12.3 文件属主和属组设置
  • 13.Linux网络服务
    • 13.1 ftp的使用
    • 13.2 ftp服务的安装
    • 13.3 ftp服务的启停及配置
    • 13.4 ssh的使用
    • 13.5 ssh服务的安装、启停及配置
  • 14.Shell的环境和功能
    • 14.1 命令补全及命令历史
    • 14.2 命令别名
    • 14.3 通配符
    • 14.4 作业控制
  • 15.Shell变量
    • 15.1 变量的概念及自定义变量
    • 15.2 PATH的环境变量
    • 15.3 其他环境变量及预定义变量
    • 15.4 位置变量
  • 16.管道与重定向
    • 16.1 管道的使用
    • 16.2 输出重定向
    • 16.3 输入及合并重定向
    • 16.4 管道与重定向应用
  • 17.Shell脚本
    • 17.1 脚本编程概述
    • 17.2 分支结构述要
    • 17.3 示例--分支结构
    • 17.4 循环结构述要
    • 17.5 示例--循环结构
  • 18.Shell脚本
    • 18.1 示例--脚本的分析
    • 18.2 演示--脚本的编写
    • 18.3 脚本的调试运行与排错
  • 19.Shell脚本的高级主题
    • 19.1 shell函数
    • 19.2 shell变量的替换
    • 19.3 案例讲解--猜拳游戏

0.说明

来源于腾讯视频Linux开发视频,主要给我自己复习看

1. Linux概述

1.1 Linux的渊源及发展

1.1.1
unix是一种分时操作系统(分时系统和实时系统的区别https://blog.csdn.net/WZJwzj123456/article/details/83243453)
我的理解:
(1)实时系统要求必须任务要在规定时间里完成,分时系统有些延迟;
(2)实时系统交互能力差,分时系统交互能力强;
(3)实时系统是cpu抢占式的,优先级高的可以打断优先级低的。分时系统不是抢占式的,需要等待低优先级的主动挂起

1.1.2
GNU(GNU is not Unix),旨在消除对软件拷贝、分发和修改的限制

GPL(GNU General Public License)通过协议来保证GNU软件对所有用户自由

LGPL相对于GPL,在商业更友好

BSD(Berkeley Software Distribution)license
copyright和copyleft,前者为著作权,后者为自由和免费

1.1.3
Linux内核版和发行版有什么不同?
发行版多了应用程序,内核是核心程序。
拓展阅读:https://baijiahao.baidu.com/s?id=1603028095502634219&wfr=spider&for=pc

1.2 Linux的结构及文件系统类型

在这里插入图片描述
kernel:下面就是硬件了,里面有硬件驱动和系统管理
运行库: 丰富的库,系统应用
shell:用户交互,命令行
实用工具程序:应用程序

EXT3、EXT4是Linux默认的文件系统类型
FAT32和NT
SWAP类型文件系统只在Linux交换分区中被使用
Linux开发基础笔记_第1张图片
Linux内swap的原理,swap的大小一般为内存的2倍
在这里插入图片描述

1.3 Linux的文件属性及目录结构

Linux开发基础笔记_第2张图片

FHS(Filesystem Hierarchy standard)
Linux开发基础笔记_第3张图片
区别/bin和/usr博客:https://www.cnblogs.com/fengjunhua/p/7737607.html
/sbin:需要特殊权限的可执行文件
/etc:配置文件,主机名称,网卡地址。关机以后还能保存
/var:放经常变的数据,例如日志、邮件
/proc:虚目录。关机以后内容就没有了,映射进来的端口。操作系统内核信息。
/sys:虚目录
/opt:第三方软件
/mnt:手动挂载目录

1.3 Linux的系统环境安装

Linux开发基础笔记_第4张图片
Linux开发基础笔记_第5张图片

主分区加拓展分区不超过4,主分区最多不超过4,拓展分区不超过1,逻辑分区在拓展分区里面(逻辑分区没有数量限制)。一般分区都是格式化过的,空白分区是没有格式化过的。

主分区和扩展分区的区别:

1、主分区

主分区也叫引导分区,Windows系统一般需要安装在这个主分区中,这样才能保证开机自动进入系统。简单来说,主分区就是可以引导电脑开机读取文件的一个磁盘分区,

一块硬盘,最多可以同时创建4个主分区,当创建完四个主分区后,就无法再创建扩展分区和逻辑分区了。此外,主分区是独立的,对应磁盘上的第一个分区,目前绝大多数电脑,在分区的时候,一般都是将C盘分成主分区。

2、扩展分区

扩展分区是一个概念,实际在硬盘中是看不到的,也无法直接使用扩展分区。

除了主分区外,剩余的磁盘空间就是扩展分区了。当一块硬盘将所有容量都分给了主分区,那就没有扩展分区了,仅当主分区容量小于硬盘容量,剩下的空间就属于扩展分区了,扩展分区可以继续进行扩展切割分为多个逻辑分区。

3、逻辑分区:扩展分区是不能直接使用的,他是以逻辑分区的方式来使用的,所以说扩展分区可以分成若干个逻辑分区。他们的关系是包含的关系,所有的逻辑分区都是扩展分区的一部分。扩展分区如果不再进行分区了,那么整个扩展分区就是逻辑分区了。

Linux开发基础笔记_第6张图片

1.4 Linux的系统环境安装

虚拟机安装,真实内存的1/4,cpu有几核就写几核
使用ISO影像文件安装

推荐:安装时,重启马上按F2切除BIOS界面,Boot里使用+按键把CD-ROM置顶,从光盘启动,避免从VMware Player启动。然后按F10,保存exit
安装完关机以后,提示请移除光盘。在设备状态上不勾选启动时链接。
Linux开发基础笔记_第7张图片
Linux开发基础笔记_第8张图片

2、命令概述

2.1 命令格式及帮助

Linux开发基础笔记_第9张图片
普通用户是$,特权用户是#
Linux开发基础笔记_第10张图片

type pwd
type ls

在vim里查找命令

# 从上往下寻找
/查找内容
# 从下往上寻找
?查找内容

3、目录操作

3.1 目录的路径概念

相对路径和绝对路径

3.2 目录操作

# 列出当前条目的自身信息
ls -d
# 递归创建多层目录
mkdir -p
# 目录拷贝命令
cp -a # 全部拷贝
cp -f # A强制拷贝,已经存在的覆盖
# 删除空目录
rmdir -p # 递归删除多层空目录 
# 删除非空目录
rm -i# 交互式
# 目录移动改名
mv

4、文件操作

4.1 文件显示及过滤

Linux开发基础笔记_第11张图片

Linux开发基础笔记_第12张图片

# 在一个终端里
while :;do echo "hello LiLi." >> test.txt;sleep 1; done
# 另一个终端里
tail -f test.txt
# 查看日志文件经常是这样操作的

4.2 文件增删及拷贝

Linux开发基础笔记_第13张图片

Linux开发基础笔记_第14张图片

Linux开发基础笔记_第15张图片

# 在根目录下,寻找文件名字带有cc的文件,从根目录以下开始查找
find / -name "cc"
# 只能寻找可执行文件 ,并在PATH变量里面寻找
which cc
#which 只能寻找可执行文件 ,并在PATH变量里面寻找。
#whereis 从linux文件数据库(/var/lib/slocate/slocate.db)寻找,所以有可能找到刚刚删除,或者没有发现新建的文件。全部匹配
#locate 同上,不过文件名是部分匹配。
#find 是直接在硬盘上搜寻,功能强大,但耗硬盘,一般不要用。
# locate采用索引技术查找
locate cc

4.3 文本编辑器的基础编辑

Linux开发基础笔记_第16张图片
Linux开发基础笔记_第17张图片

vim--->直接进入以后
:q--->是无法直接退出的
:w  文件名字--->保存退出
# 复制
yy
# 粘贴,小写在当前行下面粘贴,大写在当前行上面粘贴
p,P
# 增行
o,O
# 删行
dd
# 命令前面都可以加数字
# /是向下查找?是向上查找
# :s当前行替换,g是global(当前行的所有),c是comfirm
:s/io/IO/gc
# :%s全文替换
:%s/io/IO/gc
# 最后一行
shift+g
# 第一行
gg

vim多行注释:
https://www.cnblogs.com/yangzp/p/10791870.html

4.4 文本编辑器的高级编辑

# 跳转到第13行
:13
# 行号不显示
:set nonu
# 行号显示
:set nu
# 写在vimrc,这里的点是隐藏文件的意思
vim ~/.vimrc
set nu
set tabstop=4
set autoindent #自动缩进
# 命令模式中的撤销和回撤
小写的u
ctrl+r
# 多个文件并行执行,优势是多文件的内容可以相互之间传递
vim 1.cc 2.cc 3.cc
:args#查看几个文件参数
:first#去第一个文件
:last#去最后一个文件
:next#下一个文件
:prev#上一个文件

5.文件压缩和归档

5.1 文件基础归档和压缩

Linux开发基础笔记_第18张图片
Linux开发基础笔记_第19张图片

5.2 7z压缩及库归档

Linux开发基础笔记_第20张图片
使用7z的优点:压缩率高;能够解压rar格式,但是不能压缩rar

Linux开发基础笔记_第21张图片
.o文件::: 目标文件。就相当于windows里的obj文件 ,一个.c或.cpp文件对应一个.o文件

.a文件::: 是好多个.o合在一起的静态库文件,相当于windows下的.lib文件。给外部程序提供接口,用于静态连接 ,即STATIC mode。多个.a可以链接生成一个exe的可执行文件

.so文件::: 是shared object即动态链接文件,和windows的.dll文件差不多,用于动态连接的。使用时才载入。

.bin文件::: linux下的可执行文件,相当于windows下的.exe文件。

6.设备挂载、软件包升级与安装

6.1 挂载和卸载概念

Linux开发基础笔记_第22张图片
Linux开发基础笔记_第23张图片
电脑自动挂载是在/media这个目录上
把一个文件挂载到一个目录上

# 查看磁盘
sudo fdisk -l

阅读材料设备文件是什么:https://blog.csdn.net/gnnulzy/article/details/85117183

6.2 设备挂载及卸载

Linux开发基础笔记_第24张图片
Linux开发基础笔记_第25张图片
Linux开发基础笔记_第26张图片

# iso9660文件格式,/dev/cdrom是设备文件,/mnt是目录(-t有时候可以省略)(这是对光盘设备挂载)
sudo mount -t iso9660 /dev/cdrom /mnt
# iso是文件不是设备,把文件放在回环设备中,然后loop再挂载到/media里(对光盘镜像文件的挂载)
sudo mount -o loop -t iso9660 mycd.iso /media
# 由于光盘只读,挂载完会有一个警告,而u盘不会
# 使用-a卸载的时候提示设备正忙,需要等一会,也不是错误
# 卸载设备和目录等效

6.3 软件包升级

Linux开发基础笔记_第27张图片

# 更新软件列表
sudo apt-get update
# 升级某款软件
sudo apt-get upgrade vim

Linux开发基础笔记_第28张图片

7.进程管理

7.1 进程查看

Linux开发基础笔记_第29张图片
Linux开发基础笔记_第30张图片
Linux开发基础笔记_第31张图片

# $$为当前进程,查看指定进程只要将-p后面跟着pid号就行
top -p $$

7.2 进程控制

终止是正常退出,中止是中断退出
Linux开发基础笔记_第32张图片

Linux开发基础笔记_第33张图片

# 查看进程编号
pidof gedit

8.系统管理

8.1 简单系统操作

Linux开发基础笔记_第34张图片
shutdown可以指定时间再关机。
reboot和shutdown需要sudo
Linux开发基础笔记_第35张图片

8.2 计划任务

Linux开发基础笔记_第36张图片

man cront
# 查看第5章crontab
man 5 crontab
# 编辑crontab
crontab -e
# 进入crontab里以后/1是每隔1分钟,不加/是每个时间的第5分钟
# m h dom mon dow command
*/1 6,8-10 * * * tar czf /home/iotek/dabao.tgz /home/iotek/*.deb
# 重启cron服务
sudo service cron restart
# 查看日期
date
# 设置系统时间
sudo date -s "5:58:55"
# 查看crontab的help文档
crontab -h
# 删除
crontab -ri
# 回头看crontab还存在吗
crontab -l

8.3 内存状态查看

Linux开发基础笔记_第37张图片
Linux开发基础笔记_第38张图片

du -s /home/iotek
du -h /home/iotek/examples.desktop

8.4 磁盘分区

Linux开发基础笔记_第39张图片
分区是对设备文件的一种写入
Linux开发基础笔记_第40张图片
按m查看help文件形式
Linux开发基础笔记_第41张图片
Linux开发基础笔记_第42张图片
按n是add分区
p是主分区,e是拓展分区
设置分区号码(默认)
设置扇区(默认)
按p是打印
拓展分区是不能直接使用的,需要划分成逻辑分区
按n
按l----划分出逻辑分区
Linux开发基础笔记_第43张图片
Linux开发基础笔记_第44张图片
现在不想把逻辑分区改成linux的,改变这个id
最终把linux的改成fat32类型的
Linux开发基础笔记_第45张图片
按大写的L能list所有分区的类型(16进制表示)
Linux开发基础笔记_第46张图片
再按p可以看到分区类型得到改变,但是没有最终写入设备文件中,记得要输入w!!!!
Linux开发基础笔记_第47张图片
Linux开发基础笔记_第48张图片
syncing同步到disks里了
最后sudo fdisk -l查看一下

9.网络连接及地址查看

9.1 网络连接及地址查看

Linux开发基础笔记_第49张图片

# 本机地址链接
ping 127.0.0.1
# 发送6次就停下来
ping -c 6 127.0.0.1
# 域名也行
ping www.baidu.com

ifconfig只是临时改变网络接口地址
Linux开发基础笔记_第50张图片
Linux开发基础笔记_第51张图片
lo是虚拟网卡,本地回环,网络协议上兜一圈然后回来
硬件地址mac地址是网卡的身份证,ip地址可以变网卡地址不能变
在这里插入图片描述

9.2 域名解析

Linux开发基础笔记_第52张图片
网页打不开,qq可以登入。说明网络连接正常,域名解析有故障

Linux开发基础笔记_第53张图片
注意:并不是所有IP地址都支持反向解析

9.3 路由及网络统计查看

Linux开发基础笔记_第54张图片

#增加一个网关
sudo route add default gw 192.168.248.3
# 删除网关
sudo route del default gw 192.168.248.2

Linux开发基础笔记_第55张图片

# 查看路由表
netstat -r

10.用户管理

10.1 用户增删与查看

Linux开发基础笔记_第56张图片

# 增加一个用户,但是没有目录,创建不完整
sudo useradd bencai
# 删除该用户
sudo userdel bencai
# 创建有目录的用户
sudo useradd -m bencai
# 给用户设置密码
sudo passwd bencai
# 登入用户
su bencai
whoami
exit

10.2 用户切换

Linux开发基础笔记_第57张图片
Linux开发基础笔记_第58张图片

# 普通用户$符号root用户#状态
sudo -i
# 在指定用户中进行操作
sudo -u bencai ls /home
# sudo能够执行的命令
sudo -l
# 报错user01不在sudoers的文件夹中
sudo bencai
# 退出bencai环境,进入到root权限中
sudo -i
# 将user01加入到sudo组中
gpasswd -a user01 sudo
# 改lo的ip地址
sudo ifconfig lo 127.0.0.8

10.3 用户账户配置

Linux开发基础笔记_第59张图片

sudo usermod -L user01
# 从当前用户切换到user01失败
su user01
# 但是管理员可以
sudo -i
su user01
whoami
exit
passwd user01
# 解锁用户
sudo usermod -U user01

Linux开发基础笔记_第60张图片

less /etc/passwd# 系统用户是不能在用户界面里登入的,只有bencai,user01这些可以登入
sudo less /etc/shawdow

11.用户组管理

11.1 用户组增删与查看

Linux开发基础笔记_第61张图片

sudo groupadd user02
tail /etc/group
sudo groupdel user02
# 指定id
sudo groupadd -g 1007 user02

Linux开发基础笔记_第62张图片

11.2 用户组账户配置

Linux开发基础笔记_第63张图片
有效群组?
当groups查看用户所属群组的时候会跳出来很多。当ioteck用户touch一个File文件,只有iotek这个群组的人才能访问这个文件。现在想让bencai小组的人去访问。首先群组里要有bencai,然后把bencai变成有效群组(第一个群组即为有效群组)

# 把用户iotek加入到bencai中去
sudo gpasswd -a iotek bencai
# 把用户bencai从最后一个变成第一个
newgrp bencai
whoami
groups
touch test.out
# 可以看到test.out的群组已经改变
ls -l
# 把用户iotek从bencai中

Linux开发基础笔记_第64张图片

# 限制组群访问
sudo gpasswd -R bencai
# 查看文件时发现bencai出现
less /etc/gshadow

12.文件权限属性

12.1 文件权限的概念

Linux开发基础笔记_第65张图片
Linux开发基础笔记_第66张图片
对于目录可执行代表可访问

12.2 文件权限设置

Linux开发基础笔记_第67张图片
Linux开发基础笔记_第68张图片
Linux开发基础笔记_第69张图片

# 查看目录本身属性
ls -ld newdir
# 以非数字的形式看
umask -S
# 普通文件是没有可执行权限
# 删除一个目录
rmdir

12.3 文件属主和属组设置

Linux开发基础笔记_第70张图片

# chown也可以改群组,只能搞定一个,所以递归用chgrp
# :前面是用户,:后面是群组
sudo chown iotek:iotek newdir
sudo chown :iotek newdir

13.Linux网络服务

13.1 ftp的使用

Linux开发基础笔记_第71张图片
ftp文件传输,异步传输文件
ftp用文件名和登入口令来登入
ftp有两种传输模式,二进制和文件模式。二进制文件未发生格式转换,文件损失少
上传到服务器,下载到本地
Linux开发基础笔记_第72张图片
使用账户和口令登入
Linux开发基础笔记_第73张图片
ls不加!是列出服务器上的目录;ls加!是列出当前的目录
除了两种传输模式,数据连接的模式:主动/被动模式

Linux开发基础笔记_第74张图片
被动模式打开
主动模式,服务器主动连接你
被动模式,服务器被动等待你去连接
Linux开发基础笔记_第75张图片
bi是二进制模式
ascii是文件模式
Linux开发基础笔记_第76张图片
上传成功
Linux开发基础笔记_第77张图片
下载成功
在这里插入图片描述
退出

13.2 ftp服务的安装

Linux开发基础笔记_第78张图片
在这里插入图片描述
查看进程号
在这里插入图片描述
卸载 或使用auto-remove
只有ping的通才能在线安装
apt下载的文件在这个路径里
在这里插入图片描述

# 离线安装
sudo dpkg -i vs*.deb

13.3 ftp服务的启停及配置

Linux开发基础笔记_第79张图片

# 查看当前状态
sudo service vsftpd status

Linux开发基础笔记_第80张图片
anonymous_enable匿名登入
一般打开local_enable和write_enable(指能够上传。否则只能下载)
在这里插入图片描述
欢迎界面
Linux开发基础笔记_第81张图片
保证新配置好的文件被重新读取,重启重新加载

13.4 ssh的使用

Linux开发基础笔记_第82张图片

sudo apt-get install ssh

Linux开发基础笔记_第83张图片
windows连接

13.5 ssh服务的安装、启停及配置

Linux开发基础笔记_第84张图片

# 安装包
ls /var/cache/apt/archives/openssh*

Linux开发基础笔记_第85张图片

vim /etc/ssh/sshd_config

14.Shell的环境和功能

14.1 命令补全及命令历史

Linux开发基础笔记_第86张图片
登入以后第一个执行的是/bin/bash
Linux开发基础笔记_第87张图片
Linux开发基础笔记_第88张图片
Linux开发基础笔记_第89张图片

14.2 命令别名

Linux开发基础笔记_第90张图片
Linux开发基础笔记_第91张图片

alias
type ls
which ls
/bin/ls
alias myls='ls -ld --color=auto'
myls

14.3 通配符

Linux开发基础笔记_第92张图片
Linux开发基础笔记_第93张图片
Linux开发基础笔记_第94张图片

ls -l test[0-9, a-z].sh
ls -l test[0-2]*.???

14.4 作业控制

Linux开发基础笔记_第95张图片

# 后台运行
gedit&
#[3] 28374  3代表作业号,28374代表pid
# 把作业3换回到前台,前台占用
fg %3

Linux开发基础笔记_第96张图片
bg将后台的程序从挂起恢复运行完

15.Shell变量

15.1 变量的概念及自定义变量

Linux开发基础笔记_第97张图片
为什么引用有时候要加{}?
当后面马上要接英文。区别,究竟是一个变量名还是变量名加字符串
Linux开发基础笔记_第98张图片

15.2 PATH的环境变量

主机名,ip地址都在一个配置文件里。开机后读取这个配置文件
Linux开发基础笔记_第99张图片
bashrc只改变当前用户
改变所有的etc目录下
Linux开发基础笔记_第100张图片

# 查看所有的环境变量
env
# 环境变量保存在这两个文件中(全局的)
less /etc/bash.bashrc
less /etc/profile
# 一般不要去改全局的
# 家里的
less ~/.profile
less ~/.bashrc
# PS(Prompt Sign):命令提示符
PS1='\u@\w\$:'
# 加载修改后的文件
. ~/.bashrc
# 重启启动shell
echo $PS1

ps相关资料
https://www.jianshu.com/p/d4b905e76528

Linux开发基础笔记_第101张图片

# 导出环境变量
export PS1
# 产生子shell
bash

Linux开发基础笔记_第102张图片

# 环境变量的好处是运行命令时,不用在加入路径
ls
/bin/ls
# 效果一样
cp bin/ls ils
# 直接运行ils不成功
/home/dwz/ils #能运行
# 临时添加环境变量
PATH=/home/dwz/ils:$PATH

15.3 其他环境变量及预定义变量

Linux开发基础笔记_第103张图片

echo $PS1
# \u是当前用户,:@无意义格式,\$普通用户是$,特权用户是#
PS1='\u:@\$'
sudo -i
exit
# PS2是换行符的提示符
# ls -l \然后回车,换行

Linux开发基础笔记_第104张图片

echo $$
echo $0
# 杀死当前shell
kill -9 $$
# echo $?
# 0是成功, 1是失败
dasfhj #乱输入
echo $? #返回非0
# 命令后加&是发送到后台运行
sleep 10000&
# [1] 28628
echo $!
kill -9 $!
# 查看当前后台任务
jobs

15.4 位置变量

Linux开发基础笔记_第105张图片
位置变量总共就9个,当不够时用shift切换

任务一:
vim test.txt
\文本内容
ls -ld $1
ls -l $1
\
# .相当于source,把该文件加载到当前shell里来运行
. test.txt /home

任务二:
vim test.txt
\文本内容
ls -ld $1
ls -l $1
shift
ls $2
\
# 传进去三个地址,超出txt里面的变量数。遇见shift,自动往后推一个参数,$2指的是/ect.最后显示/home和/etc
. test.txt /home /var /ect
# 

16.管道与重定向

16.1 管道的使用

Linux开发基础笔记_第106张图片
Linux开发基础笔记_第107张图片

# grep -v 不包含字段
ps aux | grep "bash" | grep -v "grep"
# 标准错误信息是不能通过管道传递的
# newdir是正常文件,asdhiffeljh是错误信息。最后错误信息并没有通过管道筛选,也直接输出了
ls -l newdir asdhiffeljh | grep test

16.2 输出重定向

Linux开发基础笔记_第108张图片
覆盖重定向是把原来的文件清空
追加重定向是在文件的尾部添加
缺省了文件描述符1
Linux开发基础笔记_第109张图片

16.3 输入及合并重定向

Linux开发基础笔记_第110张图片
Linux开发基础笔记_第111张图片

# cat缺省条件下,键盘输入什么就输出什么.ctrl + d 结束
cat output.txt
cat < output.txt
# 遇到EOF结束,EOF可以自己取END,BBB都行
cat << EOF
> asfdjh
> asfhjk
> asdfhjk
> EOF
# 错误文件虽然不能写入output.txt文件中,但是把原来的文件清空了
ls -l djbfa/ > output.txt
# 目标:想把正确信息和错误信息全都输入文件中
# 正确信息进去了,错误信息没有进去
ls -l dfka/ /home/dwz > output.txt
# 错误信息进去了,正确信息没有进去
ls -l /home/dwz dfka/ 2 > output.txt
# 正确操作
ls -l /home/dwz dfka/ & > output.txt


16.4 管道与重定向应用

Linux开发基础笔记_第112张图片

ls -l | grep bencai > output.txt
# cat本来输出到stdin重定向输入到output2.txt中
cat < output.txt > output2.txt
cat > output3.txt << FF

设备文件原来都是在内存中,然后都输入到

Linux开发基础笔记_第113张图片

17.Shell脚本

17.1 脚本编程概述

Linux开发基础笔记_第114张图片

Linux开发基础笔记_第115张图片
脚本运行的三种方式

Linux开发基础笔记_第116张图片

Linux开发基础笔记_第117张图片
输出进程号和进程名,可以看出两种不同方式运行脚本的区别,
Linux开发基础笔记_第118张图片

17.2 分支结构述要

Linux开发基础笔记_第119张图片
Linux开发基础笔记_第120张图片

17.3 示例–分支结构

#!/bin/bash
# 方案一,符号级联:
test -x test2.sh && echo "ok" || echo "failure"
# 方案二,if-else分支:
# []前后均有空格
if [ -x $1 ]
then
	echo "ok"
# 一行里两个命令,要加分号
elif [ -x $2 ];then
	echo "$2 executable"
else
	echo "fail"
fi
# 方案三,case分支:
# 赋值=不能有空格
Value=$3
case $Value in
	a)
		echo "A"
	# 有两个分号
	;;
	b)
		echo "B"
	;;
	# *通配符
	*)
		echo "C"
	;;
esac

17.4 循环结构述要

Linux开发基础笔记_第121张图片
Linux开发基础笔记_第122张图片

17.5 示例–循环结构

#!/bin/bash

Count=1
# 第一种
#while [ -x $1 ]
# 第二种
until [ -x $1 ]
do
	[ $Count -ge 5] && break
	echo "running..."
	let Count++
done
# 第三种
Count=1
for Var in aa bb cc dd ee ff
do 
	echo "loop $Count"
	echo "$Var running..."
	let Count++
done

18.Shell脚本

18.1 示例–脚本的分析

Linux开发基础笔记_第123张图片
Linux开发基础笔记_第124张图片

18.2 演示–脚本的编写

#!/bin/bash
#------------------------
#--选出10个3的倍数,从给定的自然数开始
#------------------------

#--输入
read -p "请输入一个自然数:" Input
if [ $Input -gt 0] 2 > /dev/null ; then
	echo "你输入的是自然数,从此自然数开始的10个3的倍数为"
else 
	echo "你输入的不是自然数,程序异常退出。"
	exit
fi
#--处理并输出
Count=0
Num=$Input
while [ $Count -lt 10 ]
do
	let Num2=$Num%3
	if [ $Num2 -eq 0 ] ; then
		echo "$Num"
		let Count++
	fi
	let Num++
done

18.3 脚本的调试运行与排错

/dev/null的内容:https://www.cnblogs.com/songgj/p/8998049.html
当输入不是自然数的时候,会把错误输入到/dev/null中

19.Shell脚本的高级主题

19.1 shell函数

Linux开发基础笔记_第125张图片
Linux开发基础笔记_第126张图片
Linux开发基础笔记_第127张图片
Linux开发基础笔记_第128张图片

Linux开发基础笔记_第129张图片
!!!注意:这里有两个$1,含义却不一样。echo “$1 你好”这里表示"$1 海同"这个参数,而nihao “$1 海同”这里代表文件外部输入iotek这个参数(见下图)
Linux开发基础笔记_第130张图片

19.2 shell变量的替换

Linux开发基础笔记_第131张图片
Linux开发基础笔记_第132张图片
Linux开发基础笔记_第133张图片

# 删除一个变量
unset today
# 变量today里面为空
echo $Today
# 显示friday
echo ${Today:=friday}
# 显示friday
echo $Today
unset Torrow
# 缺省报错
echo ${Torrow:?"no set value"}
Torrow=sunday
# 显示输出sunday
echo ${Torrow:?"no set value"}

Linux开发基础笔记_第134张图片
Linux开发基础笔记_第135张图片
Linux开发基础笔记_第136张图片

19.3 案例讲解–猜拳游戏

Linux开发基础笔记_第137张图片
Linux开发基础笔记_第138张图片
Linux开发基础笔记_第139张图片

Linux开发基础笔记_第140张图片
Linux开发基础笔记_第141张图片
Linux开发基础笔记_第142张图片
修bug:
Linux开发基础笔记_第143张图片

Linux开发基础笔记_第144张图片
Linux开发基础笔记_第145张图片

Linux开发基础笔记_第146张图片
Linux开发基础笔记_第147张图片

你可能感兴趣的:(ubuntu)