#LinuxC高级 笔记一

linux命令

什么是嵌入式

以应用为中心,以计算机技术为基础,软件硬件可裁剪,适用于对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统

计算机系统组成?

硬件、软件

操作系统?

ios windows harmony os andriod linux

Linux简介

Linux起源

寻·科普|第二期:聊聊Linux的前世今生

Linux特点 免费开源

Linux优点 模块化程度高硬件支持广泛安全稳定可移植性良好

Linux是什么? 操作系统内核

Ubuntu是什么? Linux发行版

操作系统 内核

Ubuntu Linux

Windows NT

iOS UNIX

Android Linux

查看系统版本

查看Ubuntu版本

sudo lsb_release -a

cat /etc/issue

查看内核版本

uname -r

cat /proc/version

4.15.0-142-generic

4.15.0-142-generic

4:主版本号

15:次版本号

0:修订版本

142:当前版本的142次微调

generic:通用版本

分层结构

应用层:程序、命令

内核层:五大功能:进程管理、设备管理、网络管理、内存管理、文件系统管理

/bin:存放二进制文件,常用命令

/boot:存放linux内核和系统的启动文件

/dev:存放设备文件

/etc:配置文件 passwd存放用户信息

/home:存放所有用户的信息

/mnt:挂载目录

/lib:存放库文件

/proc:存放进程相关文件

驱动层:字符设备驱动、块设备驱动、网络设备驱动

硬件:鼠标、键盘、优盘、硬盘、网卡

系统关机和重启

sudo shutdown -h now 立即关机

sudo shutdown -r now 立即重启

sudo shutdown -h 15 //15分钟后关机

sudo shutdown -h 12:00 //定时关机

sudo shutdown -h 12:00 "提示语"

windows和虚拟机共享文件

1. 直接拖动windows下的文件,到虚拟机终端,mv xxxx .

2. 打开虚拟机文件夹,执行ctrl+c和ctrl+v

3. 通过共享目录的方式

虚拟机->设置->选项->共享文件夹->添加windows路径

将文件放入共享目录中,在虚拟机/mnt/hgfs/share下可以看到文件

你使用命令" vim /etc/ssh/sshd_config " 查看该文件的内容,你不小心改动了一些内容,为了防止系统出问题,你不想保存所修改的内容,你应该如何操作( )

A:在末行模式下,键入" q! "

B:在命令行模式下,键入" q! "

C:在可视模式下,键入" q! "

D:在编辑模式下,按下ESC键后,键入" :wq! "

软件安装

软件包管理机制

Ubuntu .deb

Windows .exe

Android .apk

redhat .rpm

debian:deb软件包管理机制

redhat:rpm软件包管理机制

查看ubuntu管理机制:sudo vi /etc/apt/sources.list

软件包分类

二进制软件包:xxx.deb

源码包:xxx.dsc 源码、二进制文件、配置文件、说明文档

软件的管理工具

在debian的linux发行版本下采用dpkg 和apt两种包管理工具

dpkg:离线安装,安装本地包,不能检查软件包的依赖关系,不关系仓库内的软件

apt:在线安装,通过仓库获取软件包的资源,解决依赖关系,不能安装本地包。

sl_3.03-17build1_i386.deb

dpkg工具

运行:sl

sudo dpkg -i 软件包名(全称):安装软件

sudo dpkg -s 软件包名:显示软件的安装状态

sudo dpkg -L 软件包名:显示软件的安装路径

sudo dpkg -r 软件包名:卸载软件

sudo dpkg -P 软件包名:完全卸载软件,重新下载不会保留上一次配置。

apt工具

默认安装路径:/var/cache/apt/archives/

sudo apt-get install oneko安装软件

sudo apt-get remove 软件包名:卸载软件

sudo apt-get --purge remove 软件包名:完全卸载软件包

sudo apt-get update:下载更新软件包列表信息

sudo apt-get upgrade:将系统所有软件包升级到最新版本

sudo apt-get clean:清空安装包的存放路径

练习:xeyes 运行 xeyes

xcowsay 运行:xcowsay "hello"

bastet

ubuntu网络配置

  1. 桥接模式

1)桥接模式:编辑->虚拟网络编辑器->更改设置->选择vmnet0->桥接模式->桥接的网络适配器(根据主机的网络连接进行选择,当然选择自动也可以)->确定

如果自动不行也可以找到对应的网络适配器。

2)虚拟机->设置->网络适配器->选择桥接模式

3)点击图标->Edit connections ->add可以添加->Ethernet->create->ipv4 settings->Method->(可以选择自动获取或手动设置)->save保存即可

如果是手动设置ip,需要点击Method里manual,手动设置ip地址

  1. nat模式

1)编辑->虚拟网络编辑器->更改设置->选择vmnet8->nat模式->确定。

2)虚拟机->设置->网络适配器->选择nat模式

shell

基础知识

shell:命令行解释器

shell:壳

作用:负责把应用程序的输入命令信息解释给操作系统,将操作系统指令处理后的结果解释给应用程序。

用户在命令行输入命令,先与shell进行交互,shell把用户输入的命令或按键转化成内核所能够理解的指令控制操作系统做出响应,直到控制相关硬件设备。然后,Shell将输出结果提交给用户。

shell版本

1)Bourne Shell(简称sh):Bourne Shell由AT&T贝尔实验室的S.R.Bourne开发,也因开发者的姓名而得名。它是Unix的第一个Shell程序,早已成为工业标准。目前几乎所有的Linux系统都支持它。不过Bourne Shell的作业控制功能薄弱,且不支持别名与历史记录等功能。目前大多操作系统是将其作为应急Shell使用。

别名:给命令再起一个名字 历史记录:上下箭头能找到

2)C Shell(简称csh):C Shell由加利福尼亚大学伯克利分校开发。最初开发的目的是改进Bourne Shell的一些缺点,并使Shell脚本的编程风格类似于C语言,因而受到广大C程序员的拥护。不过C Shell的健壮性不如Bourne Shell。不稳定

3)Korn Shell(简称ksh):Korn Shell由David Korn开发,解决了Bourne Shell的用户交互问题,并克服了C Shell的脚本编程怪癖的缺点。Korn Shell的缺点是需要许可证,这导致它应用范围不如Bourne Shell广泛。需要版权

4)Bourne Again Shell(简称bash):Bourne Again Shell由AT&T贝尔实验室开发,是Bourne Shell的增强版。随着几年的不断完善,已经成为最流行的Shell。它包括了早期的Bourne Shell和Korn Shell的原始功能,以及某些C Shell脚本语言的特性。此外,它还具有以下特点:能够提供环境变量以配置用户Shell环境,支持历史记录,内置算术功能,支持通配符表达式,将常用命令内置简化。

shell命令格式

ls -l test.c

命令名称 选项 参数

选项、参数:可有可无; 选项:-

历史记录

history

家目录下的隐藏文件,可以用vi编辑器打开

~:ls -a

.bash_history 默认保存2000条

history:显示历史命令

history 10:显示10条历史命令

.bashrc:定义HISTSIZE(使用history时默认显示的记录格式)

HISTFILESIZE(.bash_history文件可以存放命令的个数)变量的脚本文件

echo $HISTSIZE :查看HISTSIZE的值

起别名

alias查看系统中起别名的命令

alias 新名字='原来的命令'

unalias hn:取消别名

Linux特殊字符

通配符

通配符

含义

实例

*

匹配所有字符

a*b,a与b之间可以有任意长度的字符,也可以没有。

例如:aabcb,ab,azxcb...

?

匹配一个字符

a?b,a与b之间必须但也只能存在一个字符,该字符可以是任意字符。

例如:aab,abb,acb...

[list]

匹配list中指定的一个字符

a[xyz]b,a与b之间必须但也只能存在一个字符,该字符只能是x或y或z。

例如:axb,ayb,azb

[c1-c2]

匹配c1-c2间的任意单个字符

a[0-1]b,a与b之间必须但也只能存在一个字符,该字符只能是数字。

例如:a0b,a1b...

[^]

除了其中指定的一个字符,均可匹配

ab[^z] , ab之后可以匹配除了z的任意字符。

例如: aba abc abf abG ab3...

管道 |

命令1 | 命令2

命令1的输出作为命令2的输入

补充:wc

wc -l 文件名:查看文件行数

wc -w 文件名:查看文件单词个数(空格隔开单词)

wc -c 文件名:查看字符个数

查看当前路径下单词个数

输入输出重定向

>:输出重定向 新建模式

把要输出的内容,输出到文件里;如果文件不存在,会新建;文件已存在并有内容,内容会被覆盖

命令 &>或者 2>file:会把命令产生的错误输入到file里(用的不多)

>>追加模式

<输入重定向

命令置换符 ` `

esc按键下边`

练习:实现利用管道两个程序交互,./output的输出是./input的输入,input实现输入一句话然后打印

系统维护命令

man

1 Executable programs or shell commands

2 System calls (functions provided by the kernel)

3 Library calls (functions within program libraries)

1 可执行程序或 shell 命令

2 系统调用(内核提供的函数)

3 库调用(程序库中的函数)

su

切换到超级用户su或su root或sudo su

退出:exit

切换到其他普通目录:sudo su 用户名

sudo

临时管理员权限,有时需要输入密码

linux命令

df命令

df -Th:查看磁盘使用情况

文件系统 文件类型 大小 已使用 可用 使用比例 挂载点

Filesystem Type Size Used Avail Use% Mounted on

/dev/sda1 ext4 19G 6.6G 12G 38% /

mount命令

作用:文件系统的挂载

挂载设备:sudo mount -t 设备类型 设备名称 挂载点

卸载设备:sudo umount 挂载点

注意:卸载时不要在挂载点卸载

用户管理命令

添加用户:sudo adduser 用户名

切换:sudo su 用户名

退出:exit

删除用户并删除用户工作目录:sudo deluser --remove-home 用户名

进程管理命令

ps静态

ps -aux:显示系统中正在运行的进程

ps -ef:显示当前系统中运行的进程,包含PPID(父进程号)

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

用户 进程号 终端 进程状态 开启时间 命令

表头

含义

USER

该进程是由哪个用户产生的。

PID

进程的 ID。

%CPU

该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。

%MEM

该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。

VSZ

该进程占用虚拟内存的大小,单位为 KB。

RSS

该进程占用实际物理内存的大小,单位为 KB。

TTY

该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。?是守护进程,也就是一开始启动时系统在后台运行的进程。(后面IO会讲)

STAT

  1. D uninterruptible sleep (usually IO) 不可中断的睡眠态
  2. R running or runnable (on run queue) 运行态
  3. S interruptible sleep (waiting for an event to complete) 可中断的睡眠态
  4. T stopped by job control signal 暂停态
  5. t stopped by debugger during the tracing 因为调试而暂停
  6. X dead (should never be seen) 死亡态
  7. Z defunct ("zombie") process, terminated but not reaped by its parent 僵尸态
  8. < high-priority (not nice to other users) 高优先级
  9. N low-priority (nice to other users) 低优先级
  10. L has pages locked into memory (for real-time and custom IO) 锁在内存中
  11. s is a session leader 会话组组长
  12. l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)多线程
  13. + is in the foreground process group 前台进程
  14. 没有+时,默认是后台进程
  15. I 空闲状态进程(大写i)
  16. *守护进程

START

该进程的启动时间。

TIME

该进程占用 CPU 的运算时间,注意不是系统时间。

COMMAND

产生此进程的命令名。

补充:

grep:从文件中查找字符串

grep "要查找的字符串" 文件名

grep "\<要查找的字符串\>" 文件名:精确查找

思考:精确查找./a.out

top动态查看进程

shift +>:向下翻页

shift+<:向上翻页

q:退出

PR : 优先级

NI:nice值,值越小,优先级越高 [-20,19]

PR=NI+20

修改优先级

sudo renice NI值 PID:改变正在运行的进程的优先级

例:sudo renice 18 8088

sudo nice -n NI值 启动进程的命令:以指定的优先级运行进程

发送信号kill

kill -l:查看系统中定义的信号

2:SIGINT 快捷方式:ctrl+c 结束进程

3:SIGQUIT 快捷方式:ctrl+\ 结束进程

9:SIGKILL 杀死进程

14:SIGALRM:在程序中可以定时,定时结束后产生SIGALRM信号结束进程

15:SIGTERM 结束进程 kill发信号时不加编号,默认信号为15号

18: SIGCONT 让暂停进程继续

19:SIGSTOP: 停止信号,如果发送19号信号也会结束进程

20:SIGTSTP 暂停信号 快捷方式:ctrl+z 暂停信号

kill -num PID : num:信号编号 PID:进程号

网络管理命令

ifconfig:查看linux的ip地址

ipconfig:查看windows的ip地址

win+r打开运行窗口,输入cmd打开命令窗口,输ipconfig

ping 域名/ip地址:检查网络连通性(是否能通信)

例如:ping www.baidu.com

文件系统管理命令

用于组织和管理计算机存储的大量文件,并提供用户交互接口

文件系统分类

1)磁盘文件系统指本地主机中实际可以访问到的文件系统,包括硬盘、CD-ROM、DVD、USB存储器、磁盘阵列等。常见文件系统格式有:Ext2、Ext3、Ext4、VFAT等

2)网络文件系统是可以远程访问的文件系统,这种文件系统在服务器端仍是本地的磁盘文件系统,客户机通过网络远程访问数据。常见文件系统格式有:NFS(Network File System,网络文件系统)、Samba(SMB/CIFS)等

3)专有/虚拟文件系统:不驻留在磁盘上的文件系统。常见格式有:TMPFS(临时文件系统)、PROCFS(Process File System,进程文件系统)和LOOPBACKFS(Loopback File System,回送文件系统)。

根文件系统结构

/bin:存放系统常用的命令或可执行文件(二进制文件)

/sbin:存放更多的可执行文件(二进制),包括系统管理、目录查询等关键命令文件

/boot:存放Linux内核和系统启动文件,包括Grub、lilo启动器程序

/opt: 与系统无关的安装程序

/etc: 放的一些配置文件。Linux开机自启动脚本存放在/etc/rc.d或/etc/init.d目录下。这些目录是Linux系统中用于存放启动脚本的标准目录

/dev : 存放所有设备文件,包括硬盘、分区、键盘、鼠标、USB、tty等

/lib : 存放共享的库文件,包含许多被/bin和/sbin中程序使用的库文件

/mnt : 该目录通常用于作为被挂载的文件系统的挂载点

/proc : 存放所有标志为文件的进程,它们是通过进程号或其他的系统动态信息进行标识,例如cpuinfo文件存放CPU当前工作状态的数据

/usr : 用于存放与系统用户直接有关的文件和目录,例如应用程序及支持它们的库文件。以下罗列了/usr中部分重要的目录。

/usr/lib: 库文件,系统默认搜索的库路径

/usr/include: 头文件,系统默认搜索的头文件路径

文件内容显示

1)cat 文件名:显示文件的全部内容到终端

2)head

head 文件名:默认显示前10行

head -n 文件名:显示文件前n行

tail:

tail文件名:默认显示后10行

tail -n 文件名:显示文件后n行

4)find

find 路径 -name "文件名" 在这个路径查询文件

链接文件

文件类型 7种

b:块设备文件 /dev

c:字符设备文件 /dev/input

d:目录文件 文件夹

-:普通文件 .c .h

l:软链接文件

s:套接字文件 <网络编程>

p:管道文件 <IO>

硬链接

利用linux为每个文件分配的物理编号--inode号建立连接。因此,硬链接不能跨越文件系统

软链接(符号链接)

利用文件的路径名建立链接。通常建立软链接使用绝对路径而不是相对路径,以最大限度增加可移植性;类似于windows的快捷方式

硬链接:ln 被链接的文件 生成的链接文件

软链接:ln -s 目标文件 链接文件名

注意:

硬链接:删除或移动目标文件链接依然有效

只能操作普通文件

软链接:删除或移动目标文件链接失效,但是再次创建时,链接依然有效

通常建立软链接使用绝对路径而不是相对路径,以最大限度增加可移植性

硬链接和软链接的区别?

  1. 创建链接:硬链接利用linux为每个文件分配的物理编号--inode号建立链接;

软链接利用文件的路径名建立链接

  1. 硬链接只能操作普通文件
  2. 硬链接:删除或移动目标文件链接依然有效

软链接:删除或移动目标文件链接失效,但是再次创建时,链接依然有

文件压缩和解压

1)zip命令用于将一个或多个文件压缩成一个压缩文件

unzip 命令用于将zip压缩文件进行解压

注意:

1)具有归档功能,并进行压缩

2)可以压缩文件夹,后缀为.zip

3)压缩或解压后原文件依然存在

2)gzip命令用于将一个文件进行压缩。

gunzip命令用于将gzip压缩文件进行解压。

注意:

1)只能对一个文件进行压缩,并自后缀为.gz

2)没有归档功能

3)压缩或解压后源文件不存在

3)bzip2:功能、特点与gzip相同,只是后缀为.bz2

bunzip2:解压

tar

选项:

-x : 释放归档文件,解压

-c : 创建一个新的归档文件,压缩

-v : 显示归档和释放的过程信息

-f : 用户指定归档文件的文件名,否则使用默认名称

-j : 由tar生成归档,然后由bzip2压缩 .tar.bz2

-z : 由tar生成归档,然后由gzip压缩 .tar.gz

注意:

1)具有归档功能,并通过选项可以进行压缩或解压

2)压缩或解压后源文件存在

3)需要写全压缩或解压的文件名格式:

格式:

tar 选项 压缩(解压)文件名 [要压缩的文件列表]

组合

-cjf:以bz2的格式压缩文件

-czf:以gz的格式压缩文件

-xvf:解压一个压缩包,解压后压缩包依然存在

$tar -czf file.tar.gz *.c

$tar -xvf file.tar.gz

shell脚本

概念

shell的使用方式:手动命令和脚本

shell脚本的本质:shell命令的有序集合

shell不仅是一个应用程序还是一种脚本语言

1)编译型语言:c ,java ,c++ ,当中间出错,err直接结束,修改重新编译运行

2)解释型语言:shell python,不需要编译直接执行,当中间出错,只会在错误的地方报错,但是不会影响后面的内容;解析一条指令,执行一条指令

rwx:可读可写可执行 rw-:可读可写不可执行

r w x r w -

1 1 1=7 1 1 0=6

修改文件或文件夹权限:chmod 777 test.sh

步骤:

创建shell脚本 touch test.sh(文件以.sh结尾);名字无所谓,加上后缀更好区分

一般脚本中添加开头:

#!/bin/bash 以#开头表示注释,告诉操作系统当前脚本使用的bash类型的shell去解析的

ls -l test.sh查看权限,默认对于当前用户没有执行的权限,需要修改

chmod 777 test.sh

运行 ./test.sh或 bash test.sh

练习:

1)在上级目录下创建file1.c file2.c 两个文件

2)将该两个文件移动到家目录

3)将两个文件用tar压缩成gz的格式

linux中一切皆文件

根目录:

/

家目录:多用户

/home/hq ~ cd

下列程序段的输出结果是___Linux________(北京凝思)

#!/bin/bash

var="Welcome to Linux OS"

echo ${var:11:5}

  1. 写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个;(富士安全,广域科技,华辰泰尔,鲁科安全,神戎电子,中安云科,中维世纪,晟安信息,苏州特点电子科技)

更改文件权限为"-rwxrw-r-x"的命令(恩易物联)

某文件的权限为:drw-r--r--,用数值形式表示该权限(济南实景互动)

linux中一切皆____,有____种。(鲁科安全)

下面不是对 Linux 操作系统特点描述的是( )(鲁科安全)

  1. 良好的可移植性 B. 单用户 C. 多用户 D.多任务

如果执行命令,chmod 746 file.txt,那么该文件的权限是( )(鲁科安全、神州安付)

A. rwxr--rw- B. rw-r--r-- C. --xr--rwx D. rwxr--r--

怎样更改一个文件的权限设置?(软通动力)

  1. A. attrib B. chmod C.change D. file

对名称为test的文件执行chmod551test,则它的权限是(中孚信息、福建新大陆)

A. -rwxr-xr-x B. -r-xr-x--x C. -r--r--r-- D. -rwxr--r-

解释chmod 644 mm.txt命令含义(上海剑桥)

Linux系统中 显示一个文件最后几行的命令是: ( )(软通动力)

A. tac B. tail C. rear D. last

Linux 中的超级用户为root,登陆时不需要口令(判断题)(软通动力)

vim退出不保存的命令是______(神州安付)

A. :q B. q C. :wq D. :q!

你使用命令" vim /etc/ssh/sshd_config " 查看该文件的内容,你不小心改动了一些内容,为了防止系统出问题,你不想保存所修改的内容,你应该如何操作( )

A:在末行模式下,键入" q! "

B:在命令行模式下,键入" q! "

C:在可视模式下,键入" q! "

D:在编辑模式下,按下ESC键后,键入" :wq! "

列出当前目录下所有文件(上海剑桥)

在用vi编辑文件时, 如何保存修改?(济南实景互动

解压 text.tar.gz 文件,需要执行命令___(北京凝思)

如何解压缩后缀是.tar文件______(鲁科安全)

目前流行的两种软件包管理机制,Debian 使用( )软件包,Redhat 使用( )软件包(鲁科安全)

A. tgz B. rpm C. tar D. deb

将前一个命令的标准输出作为后一个命令的标准输入,称之为( )(鲁科安全)

linux下如何安装软件(华辰泰尔)

查看虚拟机硬盘空间使用情况(恩易物联)

建立软链接(快捷方式),以及硬链接的命令。简述他们的区别(恩易物联、鲁科安全、中维世纪)

cat,tail,grep这些指令的含义(深圳三航物联科技有限公司)

变量

用户自定义变量

一般用大写

进行赋值时用=,左右两边不能有空格

引用变量前面加$

位置变量 (命令行参数)

$0与输入的命令行一样,包含脚本名字 xx.sh

$1 , $2 .... $9 :分别包含第一个到第九个命令行参数

$#:命令行参数的个数,不包含脚本文件

$@:所有命令行参数

$*:所有命令行参数

预定义变量

$? 前一个命令的退出状态(0为真,非零为假)

$$ 正在执行进程的ID号

环境变量

变量没有类型

环境变量一般指在操作系统中用来指定操作系统运行环境的一些参数,比如临时文件夹位置、系统文件位置等

HOME /etc/passwd文件中列出的用户的主目录

PATH shell搜索路径,一系列的目录

shell语句

1.说明性语句

以#开始到该行结束,不被解释执行

#!/bin/bash 告诉操作系统使用那种类型的shell执行此脚本文件

2.功能性语句

任意的shell命令、用户程序或其他shell程序

3.结构性语句

条件测试语句、多路分支语句、循环语句、循环控制语句

功能语句

read(类似c语言scanf)

从终端获取值赋值给变量

格式:read 变量名1 变量名2……

read var1 var2 var3

把读入行中的第一个单词(word)赋给var1, 第二个单词赋给var2,

……把其余所有的词赋给最后一个变量

read -p "提示语" 变量名

expr

格式:expr 表达式

算术运算符命令expr主要用于简单的整数运算, 加(+),减(-)乘( \*) 除 (/)取余 (%)

注意:

1)表达式符号之间必须用空格间隔

2)expr引用变量必须$

3)expr自带打印功能

4)使用乘号\* 小括号\( \) 需要转义

  1. 把expr的结果赋值给变量需要命令置换符
  2. expr不能进行++ -- 操作

通过expr实现变量自加(++i)

let

let 表达式

  1. 运算的时候运算符左右两边不能有空格
  2. 不能自己打印,输出需要用echo
  3. let语句可以不加$引用变量
  4. let n=n**2 表示平方
  5. 可以++ -- ,()转义,*不转义

test

可测试三种对象:字符串 整数 文件属性

每种测试对象都有若干测试操作符

字符串测试

s1 = s2 测试两个字符串是否完全一样

s1 != s2 测试两个字符串是否有差异

-z s1 测试s1长度是否为0

-n s1 测试s1长度是否不为0 //s1为空时返回1,不为空返回0

整数测试

a -eq b 测试a与b是否相等 equal

a -ne b 测试a与b是否不相等 not equal

a -gt b 测试a是否大于b greater than

a -ge b 测试a是否大于等于b greater equal

a -lt b 测试a是否小于b less than

a -le b 测试a是否小于等于b less equal

文件属性测试

测试name 是否为一个目录 -d name

测试name 是否为一个普通文件 -f name

测试name 是否存在 -e name

结构性语句

分支语句

基本结构

if 条件

then

命令表

fi

if 条件

then

命令表1

else

命令表2

fi

嵌套结构

if 条件

then

if 条件

then

命令表2

else

命令表3

fi

else

命令表1

fi

分层结构

if 表达式1

then

命令表1

elif 表达式2

then

命令表2

elif 表达式3

then

命令表3

...

else

表明表n

fi

注意:

if和fi是条件语句的括号,必须组合使用

判断语句其他格式

if [条件]

then

命令表1

else

命令表2

fi

-o 或运算 例如 [ $a -lt 20 -o $b -gt 100 ] 返回 true

-a 与运算 例如 [ $a -lt 20 -a $b -gt 100 ] 返回 false

! 非运算 例如 [ ! false ] 返回 true

&& 逻辑与 例如 [[ $a -lt 100 && $b -gt 100 ]] 返回 false

|| 逻辑或 例如 [[ $a -lt 100 || $b -gt 100 ]] 返回 true

| 位或 例如 echo $[2|2]

&位与 例如 echo $[2&1]

练习:从终端输入3个整数;从小到大排序

case:

格式:

case 变量 in

模式一)

命令表1

;;

模式二)

命令表2

;;

*)

命令表3

;;

esac

注意点 :

1)case语句只能检测字符串变量

2)命令表以单独的双分号行结束,退出case语句

3)如果无一匹配模式,字符* 表示所有其它模式

4)case匹配项中可以存在多个模式,每种模式之间用|隔开

循环语句

格式:

for 变量名 in 单词表

do

命令表

done

执行顺序:变量依次取单词表中的各个单词, 每取一次单词, 就执行一次循环体中的命令. 循环次数由单词表中的单词数确定. 命令表中的命令可以是一条, 也可以是由分号或换行符分开的多条。

1)for i in 1 2 3 4 5 do...done:

变量i的值从单词表中获取

2)for i in {1..10} do...done:

变量i从1-10个数中取值

3)for i do...done:

变量i从命令行取值,可以省略in 单词表

4)for ((i = 0; i < 10; i++)) do...done:

书写格式类似c语言

例:求1-10的和

while do...done

格式:

while 命令或表达式

do

命令表

done

执行顺序:

while语句首先测试其后的命令或表达式的值,如果为真,就执行一次循环体中的命令,然后再测试该命令或表达式的值,执行循环体,直到该命令或表达式为假时退出循环。

循环控制语句

break n:结束n层循环

continue n:结束n层本次循环,继续下次外层循环

break:0 0 0 1 1 0 1 1 2 0 2 1

continue:0 0 0 1 0 3 0 4 1 0 1 1 1 3 1 4 2 0 2 1 2 3 2 4

break 2:0 0 0 1

continue 2:0 0 0 1 1 0 1 1 2 0 2 1

数组

赋值

1)array=(10 9 8 7 6)

2)array1=($1 $2 $3) 命令行传参

3)read a b c

array2=($a $b $c)

4)read -a array3 从终端输入数据到数组中

调用

${array[i]} 数组下标从0~n-1结束,通过下标获取数组元素

array[i]=3 对数组元素重新赋值

${array[@]} 遍历数组

${#array[@]} 计算数组元素的个数

练习:学生成绩管理系统,用shell中的case实现

90-100:A

80-89:B

70-79:C

60-69:D

<60:不及格

  1. 用shell脚本实现冒泡排序
  2. 判断当前路径下是否存在目录aa,如果不存在创建;遍历当前路径下的文件,如果是普通文件,将文件复制到aa目录下,并计算文件的个数

先测试aa是不是文件,根据测出的结果决定是否要mkdir;

for in遍历ls运行出来的内容(ls运行结果可以置换一下)

判断是普通文件 执行cp复制;同时可以定义变量++计数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/40379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s_集群搭建_k8s管理前端_dashboard安装部署---分布式云原生部署架构搭建017

然后再去安装一下一个dashboard,有了这个以后,操作k8s集群就不用 一直敲命令了 可以看到上面的命令拿过来,然后 执行就可以了 然后如果执行慢,可以直接先去下载,使用wget,然后再去 也可以在浏览器访问,把内容拿到,然后 下面是内容: # Copyright 2017 The Kubernetes Author…

登 Cell 子刊!清华大学张强锋课题组开发 SPACE 算法,组织模块发现能力领先同类工具

多细胞生物中的细胞尽管共享相同的基因组&#xff0c;但因其内部基因调控网络的差异以及与周围微环境中相邻细胞的外部信号交流&#xff0c;使得它们在形态、基因表达和功能上展现出显著的多样性。为了将细胞类型信息与其在组织内的空间位置相关联&#xff0c;空间转录组学 (Sp…

Vue86-Vuex中的getters属性

一、getters的使用 1-1、index.js中getters的书写 计算属性computed靠return获得返回值&#xff01; 1-2、组件中getters的调用 state是数据源&#xff0c;getters是拿着数据源里的东西进行一番加工。像极了&#xff1a;data和computed 二、小结

vue 启动项目报错Syntax Error: Error: PostCSS received undefined instead of CSS string

启动vue项目然后报错如下图 这个是跟node版本有关系 因为要开发不同的项目使用不同的node版本&#xff0c;所以就用nvm切换&#xff0c;所以导致了node-sass编译问题 执行这个命令就可以 npm install node-sass or npm rebuild node-sass node-sass对于node高版本和低版本切…

智能胎教仪,科技与教育的融合-N9301胎教仪语音方案

随着科学技术的不断进步&#xff0c;人们对婴幼儿教育的认知也日趋成熟和全面。其中&#xff0c;胎教作为一种重要的早期教育方式&#xff0c;近年来备受瞩目。而胎教仪语音芯片的研发&#xff0c;正是为了满足这一需求&#xff0c;为胎儿的健康成长提供更加便捷的胎教方案。 一…

Tomcat服务部署安装

一、Tomcat基础 1.Tomcat简介 Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;Tomcat虽然和Apache或者Nginx这些Web服务器一样&#xff0c;具有处理HTML页面的功能&#xff0c;然而由于其处理静态HTML的能力远不及Apache或者Nginx&#xff0c;所以Tomcat通常…

“LNMP环境搭建实战指南:从零开始配置CentOS 7下的Nginx、MySQL与PHP“

目录 1.前言 2.准备工作 2.1.环境信息 2.2.关闭SELinux和firewalld 3.安装Nginx 3.1.运行以下命令&#xff0c;安装Nginx 3.2.运行以下命令&#xff0c;查看Nginx版本 4.安装MySQL 4.1.更新秘钥 4.2.配置MySQL的YUM仓库 4.3.安装MySQL 4.4.查看MySQL版本 4.5.启动…

Springboot+Vue3开发学习笔记《1》

SpringbootVue3开发学习笔记《1》 博主正在学习SpringbootVue3开发&#xff0c;希望记录自己学习过程同时与广大网友共同学习讨论。 一、前置条件 博主所用版本&#xff1a; IDEA需要破解&#xff0c;破解工具链接容易挂&#xff0c;关注私聊我单发。 Spring Boot是Spring提…

若依前后端分离 前端路由登录页 如何进行跳转

路由守卫&#xff0c;看这篇文章 http://t.csdnimg.cn/HkypThttp://t.csdnimg.cn/HkypT

MySQL存储与优化 一、MySQL架构原理

1.MySQL体系架构 MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层 (1)网络连接层 客户端连接器&#xff08;Client Connectors&#xff09;&#xff1a;提供与MySQL服务器建立的支持。目前几乎支持所有主流的服务端编程技术&#xff0c;例如常…

有趣的递归(Recursion),一些直观的示例

从前有座山, 山上有座庙, 庙里有个老和尚在给小和尚讲故事: “从前有座山, 山上有座庙, 庙里有个老和尚在给小和尚讲故事: …” 反复而纠结的定义 看完这个故事, 对递归你已经有了印象, 很好, 这样已足够. 如果你不幸是个喜欢精确定义的人, 那么答案可能无法让你满意: 你想知…

java考试题20道

选择题 编译Java源代码文件的命令是javac javac命令是将Java源代码文件进行编译得到字节码文件(.class文件) java命令是在JVM上运行得到的字节码文件 下面是一个示例&#xff1a; javac test.java -------> test.class java test ------> 运行test.class文件下列那…

vue3 在el-input的光标处插入文本

点击文本框下方的按钮&#xff0c;将相应的文本插入光标处的实现&#xff1a; <el-input type"textarea" rows"4" v-model"formula" blur"handleBlur" clearable></el-input><el-button-group class"short_btn&q…

63、基于深度学习网络的数字分类(matlab)

1、基于深度学习网络的数字分类的原理及流程 基于深度学习网络的数字分类是一种常见的机器学习任务&#xff0c;通常使用的是卷积神经网络&#xff08;CNN&#xff09;来实现。下面是其原理及流程的简要说明&#xff1a; 数据收集&#xff1a;首先&#xff0c;需要收集包含数字…

【shell script】

文章目录 一、基础shell script二、脚本运行方式的差异三、判断式1.利用test命令2.利用判断符号[] 四、if&#xff0c;case语句1.if...then2.case...esac 五、函数function六、循环1.while和until循环2.for循环 一、基础shell script 在“shell”部分&#xff0c;那是在命令行…

Flutter——最详细(Badge)使用教程

背景 主要常用于组件叠加上圆点提示&#xff1b; 使用场景&#xff0c;消息数量提示&#xff0c;消息红点提示 属性作用backgroundColor红点背景色smallSize设置红点大小isLabelVisible是否显示offset设置红点位置alignment设置红点位置child设置底部组件 代码块 class Badge…

从数据洞察到智慧决策:数字孪生技术在智慧水利中的应用实践,为水库管理提供强有力的数据支撑和智能分析

目录 一、引言 二、数字孪生技术的核心与原理 三、数字孪生技术在智慧水利中的应用场景 1、水库管理的挑战与需求 2、数字孪生水库管理系统的构建 四、数字孪生技术在水库管理中的具体应用案例 1、洪水预测与模拟 2、水资源配置与调度 3、大坝安全监测与评估 4、生态环…

【C++/STL深度剖析】stack和queue的详细概念和使用(图文详解,初学者必看!!)

目录 一、前言 二、stack 的详细解析 &#x1f525; stack的介绍&#x1f525; &#x1f525; stack的构造&#x1f525; &#x1f525; stack的常用接口&#x1f525; &#x1f4a7;push &#x1f4a7;top &#x1f4a7;pop &#x1f4a7;empty &#x1f4a7;size…

Android文件路径获取

文件存储相关的文档 文件存储相关的系列文档如下&#xff0c;可根据需要查看这些文档 Android文件路径获取 Android存储权限梳理及api接口调用 Android各种存储路径的比较 Android R及以上版本中APP外部存储实现 Android文件路径获取 在Android开发中&#xff0c;经常需要…

24位DAC转换的FPGA设计及将其封装成自定义IP核的方法

在vivado设计中,为了方便的使用Block Desgin进行设计,可以使用vivado软件把自己编写的代码封装成IP核,封装后的IP核和原来的代码具有相同的功能。本文以实现24位DA转换(含并串转换,使用的数模转换器为CL4660)为例,介绍VIVADO封装IP核的方法及调用方法,以及DAC转换的详细…