linux笔记

一、系统内存管理
虚拟内存=交换空间+物理内存。 init任何一个进程的时候, 交换空间都会为进程分配虚拟空间, 内核会将一段时间不访问的内存页面放到交换空间去(换出)。
需要的时候再拿到内存空间里来(换入),如果内存空间不够,将内存空间里面的其他页面放到交换空间为此进程让出空间。

二、软件程序管理
linux有5个启动运行级
运行级是1的时候是单用户模式, 只有一个终端进程和基本的系统进程。
标准进程是3,大多数应用软件,网络支持程序等,都会启动。
5运行级别的时候会启动图形化的Xwindow系统,允许用户通过图形化桌面窗口登陆系统。
linux通过调整启动运行级来控制整个系统的功能。,从3到5可以将控制台系统编程更先进的X window桌面系统。

三、硬件设备管理
linux系统需要和硬件通信,需要在硬件和系统之间加入硬件驱动程序,相当于对硬件的和系统之间的服务访问点和服务人。允许内核和硬件设备之间交换数据。
2种方法插入设备驱动代码:1、编译近内核的设备驱动代码;2可插入内核的设备驱动模块(可插入可取出)。
可插入内核的内核(硬件)驱动模块:设备不再需要的时候移走,需要的时候加入此模块。扩展性强。
linux将硬件设备当成特殊的文件: !!!称为设备文件。

设备文件3种:
1、字符型设备文件 (每次只能处理一个字符的设备)
2、块设备文件 (每次可以处理大块数据的设备)
3、网络设备文件 (数据包发送、接收的设备,包括网卡和一个特殊的回环设备) , 回环设备允许linux系统设用常见的网络编程协议同自身通信,比如自己的某个访问服务点的进程和自己的另一个访问服务点的进程通信
通过回环设备从应用层走到下层再走到TCP 与自己的另一个进程通信。

linux为每一个设备都创建了称为“节点”的特殊文件。与设备的所有通信都通过“节点”完成。每个“节点”都有唯一的数值对linux内核识别它,包括主设备号和次设备号。
类似设备被划分到主设备号下,次设备号用于标识主设备组下的某个特定设备。

四、文件系统管理
linux内核支持通过不同类型的文件系统从磁盘中读写数据。除了自由系统以外, 还支持从其他操作系统(比如windows) 采用的文件系统种读写数据。内核要支持这些文件系统必须在编译时就加入对可能用到的文件系统的支持。
linux 的访问硬盘都必须格式化为文件系统中的一种(比如ext3、ext4等等)。
linux内核采用虚拟文件系统作为和每个文件系统交互的接口,这为linux同任何类型的文件系统通信提供了一个标准接口。!!!虚拟文件系统。当每个文件系统都被挂载和使用时,虚拟文件系统将信息都缓存到内存中。

GUN工具
一、核心工具
除了内核来控制设备硬件之外,还需要一个工具来执行标准功能,GUN工具就是来执行标准功能的软件。其中GUN供linux使用的核心工具被称为coeutils软件包,由三个部分组成
1、处理文件的工具
2、操作文本的工具
3、管理进程的工具
每部分都包含了对linux系统管理员和程序员至关重要的工具。

二、shell
GUN\linux shell 是一种特殊的交互式工具。为用户提供了启动程序、管理文件系统中的文件及运行在linux系统上的进程的途径(为用户提供文件管理进程管理,启动进程的途径)
shell的核心是命令提示符,命令提示符是shell负责交互的部分。它允许用户输入命令,解释命令,在内核中执行命令。
shell命令包括:1内部命令;2命令行中输入程序名称让内核执行输入的程序。(将多个shell命令放入文件中作为程序执行称为shell脚本,可以将命令行中的任何shell命令放进脚本里作为一组命令执行)。
有多种shell,每种都有不同特征,有些便于管理文件,有些便于管理进程。bash shell 是发行版默认的,被当作标准
cli模式称为linux控制台,仿了早期的硬界限控制台终端,是同linux系统交互的直接接口!!! CLI 终端模式是与linux系统交互的直接接口!也可以在图形化界面中使用终端仿真包在桌面系统中模拟出一个控制台终端来使用。
ctrl + alt + F2 - F7 启动终端,桌面模式下(第一行的tt2 tt3代表第几个终端。一般linux启动时会开5-6个。有些会开很多个。)
桌面的终端仿生器是GNOME terminal ,为桌面版linux 提供终端命令行CLI模式的功能和体验。

shell基本
登陆时启动的shell依赖于账户的配置
/etc/passwd文件包含了所有账户以及每个用户的基本配置信息。
其中账号:bin/bash 或者其他shell 表示此账户可以操作的shell类型。 比如agan 用户配置的bin/bash 则当agan登陆时,bash shell 将启动。
进入终端时[user@servers ~] 第一部分是当前用户ID名称, 第二部分是系统名。

linux将文件存储在单个目录结构中,这个目录称为虚拟目录。虚拟目录将安装在PC上的所有存储设备的文件路径纳入单个的目录结构中。 根目录纸包含一个root目录。根目录下的所有目录和文件会按照访问他们的目录路径一一列出。
linuxPC上安装的第一块硬盘称为“根驱动器”。“根驱动器”包含了虚拟目录的核心,其他目录都是从那里开始构建的。
linux会在根驱动器上创建一些特别的目录 ,称之为“挂载点”,挂载点是虚拟目录中用于分配额外存储设备的目录。(挂载点由根驱动器分配,用于分配额外的存储设备的目录)
虚拟目录会让这些文件和目录出现在这些挂载点目录中,然而他们却存在另一个驱动器中。
通常系统文件存在根驱动器中,而用户文件存在另一个驱动器中。第一块硬盘根驱动器挂在/目录 。其他驱动器(硬盘)可以挂在到虚拟目录的任何地方,比如/home里。

/bin 二进制目录,存放多种用户级gun
/boot 启动目录, 存放启动文件
/dev 设备文件 ,linux 在这里存放设备节点, 设备节点用于linux 和 硬件交互
/etc 系统配置文件目录
/home 主目录。 linux 在这里创建用户
/lib 库目录,放系统和应用程序的库文件
/mnt 挂载目录,另一个可以移动媒体设备的常用挂载点
/medie 媒体目录,可移动媒体设备的常用挂载点
/opt 可选目录, 用来存放第三方软件包和数据文件
/root root用户的主目录
/sbin 系统二进制目录, 用来存放许多系统管理员级工具
/sys 系统目录 ,存放系统硬件信息的相关文件
/run 运行目录 ,存放系统运作时的运行数据
/tmp 临时目录,可以在该目录中创建和删除临时工作文件
/usr 用户二进制目录, 存放大量用户及 的gun工具和数据文件/
/var 可变目录, 常用于存放经常变化的文件, 比如 日志文件。

ls命令:一点开头的是隐藏文件。 la -a参数出隐藏文件, -F 区分文件和目录。 -R 列出当前目录下包含子目录中的文件(), -i 查看inode编号
L 显示长列表:文件类型目录d、文件-、字符型文件c、设备型文件b!!权限,硬链接数,文件属主,文件属组,文件大小,上次修改时间,文件名称或者目录名称

touch 创建空文件 , -a 修改访问时间
cp 复制 源文件 目标文件 CP -R 可以复制整个目录。。这个强大了我的天。

ln -s 源文件 符号链接文件 给一个文件或目录创建符号链接(软连接)。符号链接仅仅指向源文件。 ls -i 查看inode编号,说明符号链接文件和源文件是不同的文件。两个编号不同,大小不同。
ln 源文件 目标文件 给一个文件创建硬链接,硬链接是独立的虚拟文件,包含了原始文件的信息和位置,它和源文件是同一个文件,引用硬链接等于引用源文件。只能在存于同一媒体的文件创建硬链接。不同媒体只能存符号链接。
mv 源文件 目标路径及文件 移动命令
rm 删除文件 -i 提示 -f 强制执行, -r 递归 -d 仅删除空目录。

mkdir 创建目录 rmdir 删除目录。

file 文件类型探测

cat 查看整个文件 -n 加行号 -b 给有文本的行加行号 -T 不让制表符出现^I替换文本中所有制表符
more 用于解决cat的缺陷, 通过手动控制慢慢动。cat 无法控制,一下全部输出了。
less 是more的高级版,基本功能一样。

tail 默认显示文件末尾10行。 -n 20显示20行。 -F 实时显示
head 默认显示文件头部10行。 -n 20显示20行。 -F 不支持

ps 进程查探 -a 显示无终端进程之外所有进程以及控制进程 -N显示属主的进程 ps 需要随时查手册,有点多 -ef输出所有进程并且完整格式。

UID:启动这些进程的用户
PID:进程的ID (processID)
PPID: 父进程的进程号(如果此进程由另一个进程启动)
C:进程生命周期中CPU的利用率
STIME:进程启动的时候的系统时间
TIME:进程运行的时间
TTY:进程启动时的终端设备(古老的文子意义,和开头的tty2一个意思)
CMD:启动的程序的名称
VSZ:进程的虚拟内存大小
RSS:驻留集大小(未换出占用的物理内存)
STAT:当前进程状态 S睡眠 s先导进程 N比普通优先级低,R正在运行 Z僵死进程 T 停止进程 D短期等待
<高优先级 N低优先级 L有页面锁定在内存中 s控制进程 l多线程进程 +该进程运行在前台
列如:S<sl 休眠 高优先级 控制进程 多线程

PRI:进程优先级(数字越大优先级越低)
NI:谦让度,用来决定优先级
SZ:如果换出此进程需要多少交换空间
ADDR:进程的内存地址(首地址)
WCHAN:进程休眠的内核函数地址

top 命令
第一行:当前时间 系统运行时间 登陆用户 1 5 15分钟平均负载 ,越高负载越高
第二行:tasks 任务总量 ,R总量 S总量 ,T总量, Z总量
第三行:CPU使用比例 用户 系统 等等。。
第四行:总内存 总使用 总空闲
第五行:总交换空间 总使用 总空闲

PID : 进程id
USER :属主名
PR:优先级
NI:谦让度
VIRT:进程占虚拟空间总量
RES:进程占物理空间总量
SHR:进程和其他进程共享的内存总量
S:进程状态 D可终端的休眠短等待 R运行 S休眠 T跟踪状态或禁止 Z僵死状态
%CPU:进程使用CPU时间比例
%MEM:进程使用内存占可用内存的比例
TIME:自进程启动到目前位置CPU的时间总量
COMMAND:启动的程序名

kill PID 停止进程 kill -s 支持指定其他信号 例如:kill -s HUP 3940
killall 支持通过通配符和进程名结束进程 列入killall *http

mount 显示挂载信息
媒体的设备文件名
媒体挂载到虚拟目录的挂载点
文件系统类型
已挂在的媒体访问状态

df 查看已挂载的磁盘使用情况
du 当前目录下素有文件、目录、子目录的磁盘使用请情况 -c 显示列出文件的总大小,-m以M单位-g以G单位-k以K为单位 -s显示每个输出单位的总计

sort 排序 默认按照字符排序从那个小到大 -n 按值排序 -M 按月排序,比如日志文件每行起始Apr Dec -M只能识别3字符的月份名。 -o 可以将排序结果输入到文件 -t 区分键位置的字符 ps aux | sort -nrk4 n按数值r降序 k按第几个位置开始比对
grep 匹配数据 例如 grep 3 file1 从file1中匹配3 ps aux --forest | grep hot 在输出的进程中匹配 hot -v反向匹配输出没匹配上的 -n 显示行号 -c 有多少行匹配上 -e 指定多个匹配模式 比如-e t -e file 和ls一样可以用正则

压缩工具 bzip(扩展名.bz2) gzip(gun压缩工具.gz) zip(.zip) compress(.Z需要compress包,很少用了)
gzip 压缩文件 gzcat查看压缩过文件的内容 gunzip 解压文件
bzip2用法和gzip一样。
tar才是linux和unix的标准归档工具 tar -c切换到指定目录!!! -f 输出结果到文件或者设备文件!!! -z 将输出重定向给gzip来压缩文件内容.tar.gz -v 在处理文件时显示文件 -t 列出归档文件 -x从归档中提取文件 -j bzip2压缩.tar.bz2
tar czf a.tar.gz *.jpg 输出到文件或者设备 这里是 a.tar.gz c是切换到指定目录 这里是./ -A 在已有tar归档文件追加到令一个已有tar归档文件 --delete 从已有归档tar中删除,u将同命文件覆盖进tar归档文件中
x提取 zj 压缩, f 输入到, c切换到的目录。

命令分组:执行时会创建一个子shell 将命令用括号包起来,分号隔开(pwd;ll;cd … ; pwd;ls;cd … ; …)是一个进程列表 (也可以加载{}花括号中在尾部加上;)花括号不会创建子shell
环境变量$BASH_SUBSHELL echo 时输入0以上说明有子shell 进程列表是运行在子shell上的一条或多条命令 (echo 1;(echo 2)) 这种是进程列表会产生一个子shell然后在这个子shell中又产生一个子shell(对一代shell来说是子子shell).
可以经常用shell进程多进程处理。但是代价不小

sleep 休眠

后台模式 在命令后面加上&符号 后台回返回后台作业号和PID号
jobs显示后台作业
将tar进程列表放入后台模式是个有效的例子。

shell子进程可以由父shell创建,也可以由其他shell创建。

coproc 协程处理,协程可以同时做两件事生成一个子shell,并在这个子shell中执行命令。 用协成会启用一个后台作业。
which type -a 可以找到命令

外部命令执行的时候会建出一个子进程,叫做衍生。 必须执行衍生操作的时候,要花费时间和精力来设置新的子进程环境,所以,外部命令多少还是有代价的。
内部命令和shell编译成一体,不需要子进程来执行。 可以用type 来查看命令是否是内建立命令。 which 命令只显示外部命令文件。

history 强制将历史数据写进.bash_history !+命令在history编号列表,直接召回使用

alias 命令别名 -p 查看设置好的别名 例如 alias li = ‘ls -l’。别名定义好后, 可以在shell中使用, 也可以在脚本中使用。
alias属于内部命令, 所以定义的只能在它所被定义的shell进程中有效,比如。子进程定义了一个命令别名,其他shell是不能用这个别名的,因为这个别名只属于这个shell

环境变量: 存储有关shell会话和工作环境的信息。 环境变量的特性允许在内存中存储数据,以便程序或者shell运行的脚本能够轻松访问到他们。是一种数据持久的简便方法。
环境变量: 1、全局变量 2、局部变量
全局变量对shell会话和所有生成的子shell都是可见的。局部变量值对创建他们的shell可见。全局变量对子shell需要获取父shell信息的程序非常有用。全局变量用env、 printenv printenv 可以显示个别环境变量 也可以用echo显示环境变量的值
echo中 $HOME 前面的符号能让变量作为命令行参数。

set 会查看某个特定进程设置的所有环境变量。包括全局变量、局部变量和用户自定义变量。

启动bash shell 后可以用等号给这个局部环境变量赋值 。比如 my_variable=Hello; echo $my_variable 输出 Hello; 赋值时变量名、等号、值之间没有空格,紧挨着。局部环境变量另一个shell不能用。
设置全局环境变量 在变量名前加export ; 比如 export my_variable 。 此时子shell也可以echo $my_variable 这个环境变量的值。但是子shell中改变这个环境变量只影响自己并不影响父shell。
unset 删除环境变量。 比如 unset my_variable 。如果在子shell中删除了一个全局变量,并不影响父进程。
HOME 当前用户主目录
PATH shell查找命令的目录列表
PS1 shell命令界面主提示符
PS2 shell命令界面次提示符
BASH shell的全名路径
BASHPID 当前shell的PID
RANDOM 返回一个0-32767的随机数 RONDOM\

PATH环境变量:
输入外部命令时,shell必须搜索系统来找到对应的程序。 PATH 环境变量定义了进行命令和程序查找的目录。没有包括在PATH变量里的外部命令使用必须使用绝对路径。
追加PATH PATH= P A T H : / h o m e / c h r i s t i n e / S c r i p t 也 可 以 加 入 单 点 符 , 表 示 当 前 目 录 P A T H = PATH:/home/christine/Script 也可以加入单点符,表示当前目录 PATH= PATH:/home/christine/ScriptPATH=PATH:. 对PATH的修改只能持续到退出或者重启系统。

启动shell的方式:
1、登陆时作为默认登陆shell
2、作为非登陆shell的交互式shell
3、作为运行脚本的非交互shell

登陆shell会从五个不同文件中读取命令
1、/etc/profile 注意/etc/profile 是主启bash shell 的主启动文件。每个用户登陆时候都会执行 。其中的for 用以迭代启动/etc/profile.d目录下的文件,其文件下.sh供bash shell使用,csh供 c shell使用
2、 H O M E / . b a s h p r o f i l e 3 、 HOME/.bash_profile 3、 HOME/.bashprofile3HOME/.bashrc
4、 H O M E / . b a s h l o g i n 5 、 HOME/.bash_login 5、 HOME/.bashlogin5HOME/.profile
2-5中shell会按照.bash_profile->.bash_login->.profile这样的顺序查找。第一个找到余下的忽略。2-5为用户提供一个专属的启动文件来定义用户所用到的环境变量。位于用户的home目录下,这些环境变量会在每次启动bash shell时生效。
bash shell 会先查看是不是有个.bashrc 文件, 有的话会先执行里面的命令。
交互式shell 由shell或者其他进程打开的shell 是交互式shell 只会查找.bashrc 文件,不会访问/etc/profile文件。
bashrc问就按作用:提供/etc下通用的bashrc文件获得通用命令,为用户提供一个定制的自己的命令别名,私有脚本函数

非交互式shell会先从BASH_ENV提供的环境变量中查看要执行的启动文件。

永久全局环境变量倾向于将新的或修改过的变量放置在/etc/profile 并是不最佳。因为更新时此文件会更新。最好是在/etc/profile.d目录中船舰以.sh结尾的文件,把所有新的或又该过的全局环境变量设置在这个文件中。
个人永久性变量亲倾向于放置在&HOME/.bashrc中。 但是如果设置了BASH_ENV,它指向的是$HOME/.bashrc才可以。 不然要放在BASH_ENV指向的地址。

环境变量可以作为数组使用, 数组变量。 例如: ANNN=(1 2 3 4)中间空格隔开, 引用时候 echo {KaTeX parse error: Expected 'EOF', got '}' at position 8: ANNN[2]}̲ 会出现3 显示整个echo …ANNN[*]} 可以改变 ANNN[3]=5 可以删除其中值unset ANNN[3] 删除整个unset ANNN

文件权限:
linux使用专门的文件来将用户的登陆名匹配到对应的UID值。/etc/passwd root用户的UID固定分配为0。linux会为不同的功能创建不同的账户,这类账户不是真账户是系统账户所有运行在后台的服务都需要一个系统账户登陆到Linux系统上。
500一下的UID是系统账户。
/etc/passwd 登陆名 密码 UID GID 文本描述 HOME目录位置 默认shell 密码字段设置成了x。 密码单独保存在/etc/shadow 中。特定程序才能访问这个文件。root用户可以访问
/etc/shadow 9个字段 登陆名 加密后的密码 距离上次修改后天数 多少天后可以改密码 多少天后必须更改密码 密码过期多少天之前提醒用户 密码过期多少天禁用用户 用户被禁止的日期 预留字段

useradd 添加用户 -m 创建/HOME目录 -D查看创建时的具体值。 -g 指定用户组。 -r 创建系统账户 -u为账户指定唯一UID -e指定过期时间YYYY-MM-DD -G指定登陆组之外所属的一个或多个组。 -D 后跟上-参数可以修改默认新用户设置
userdel 删除用户 -r删除用户HOME目录及邮件目录。
usermod 用户修改 -l 修改登陆名 -L 锁定用户其他用户无法登陆 -p 修改账户密码 -U 解除锁定,其他用户可以登录。 -L很实用。
passwd 改用户密码 只有root可以改别人密码,其他用户passwd只能改自己密码。
chpasswd 大量修改密码时用。
chsh、chfn、chage 用来修改特定的账户信息。
/etc/group文件包含了系统上用到的组的信息。 组名 组密码 GID 该组用户列表
groupadd 创建组 usermod -G 可以将用户添加到组。
groupmod 修改组 -n修改组名 -g修改GID

文件权限:
-文件
d目录
l链接
c字符型设备
b块设备
n网络设备
r可读
w可写
x可执行
文件对象属主
文件对象属组
系统其他用户

文件权限依次是属主权限 属组权限 其他用户权限

umask命令是用来设置创建文件时候的默认权限。 对文件来说 666 减去 umask 022 得到644 权限 ,对目录来说777 减去022 得到755权限。
chmod 改变文件权限 比如 chmod 760 file1 u用户 g组 o其他 a所有 在基础上增加权限+号 减少权限-号,设置权限= 比如chmod o+r 为其他用户提供读权限多了读。

chown 改变文件主 ,可以支持改变文件数组。 比如 chown dan(主) dan(组) file -R 递归改变目录下的。
chgrp 改变文件的默认属组 chgrp shared file

组用来为组下用户共享文件;在SGID启动后,在共享目录下创建的新文件都属于该目录的属组,也是这里每个用户的属组。

管理文件系统:ext ext2 ext3(几乎是所有linux发行版默认的文件系统) ext4是ext3的扩展(现在是大多数流行linux发行版采用的默认文件系统)
ext4支持区段, 区段在存储设备上按块分配空间,索引节点表值保存起始块位置。支持预分配技术。可以为文件预留空间,分配所需要的块。

操作问价系统 理解逻辑卷 (任务 ,以后)
fdisk 工具管理系统上的任何存储设备上的分区,是个交互式程序。

安装软件程序:
包管理 , 软件包存储在服务器上,这些服务器称为仓库,可以通过PMS(包管理系统)来搜索软件包。或者更新系统上已安装的软件包。 软件包通常会依赖其他的包,需要先安装被依赖的包。
主要分为两种包管理系统 rpm 和 dpkg

rpm 是centos 用的。 前端可用工具有yum 、urpm 、zypper , 都是基于yum命令行工具。
yum list installed 列出已经安装了的包。 可以用> 将输出重定向到一个文件中。 yum list installed > list.txt
yum list xterm 查看是否已安装。
yum provides file_name 查看file_name文件属于哪个包。
yum install package_name 安装软件包。
也可以手动下载rpm 安装文件用yum 安装 yum localinstall package_name.rpm
yum list updates 列出所有已安装软件的可用更新
yum update package_name 更新软件包
yum remove package_name 删除软件包保留配置文件和数据
yum erase package_name 删除软件和所有有关文件

损坏的包依赖关系: 包的依赖关系因为另一个包的安装被覆盖掉
尝试yum clean all 再尝试 yum deplist package_name

yum 软件仓库 yum的仓库文件定义再/etc/yum.repos.d中,可以在里面添加URL添加新的yum软件仓库。有些优秀的仓库会提供可下载的rpm 文件 可在本地安装 yum localinstall package_name.rpm
yum repolist 正在从哪里写仓库中获得软件。

tar.gz 包形式的安装:
1、将包解压到某个目录
2、./configure 步骤, 如果确实文件会显示错误信息表示确实了什么。 没有安装GUN C编译器, 只会显示一条信息。
3、make 编译源码。
4、make install

构建脚本:
1、第一行要用#!/bin/bash 表明是使用哪个shell 除了第一行之外 # 是注释 !!没有将.放入PATH 或 环境变量文件时。 执行shell脚本 加./
2、可以在shell脚本中定义用户变量,区分大小写,使用等号赋值,并且等号前后无空格。 脚本里定义的变量在脚本生命周期里,脚本结束时会删除。
3、变量赋值时不加 美 元 符 号 , 但 是 引 用 的 时 候 要 用 美元符号, 但是引用的时候要用 符号。
4、 `` 反引号 ,将输出赋为一个变量。比如 time=date。此时将date的输出赋值给了time变量。也可以使用 ( ) 格 式 。 比 如 t i m e = ()格式 。比如time= ()time=(date) 将date的输出值赋给了time变量
5、 $(date %%m%d)可以将date格式化。

输出重定向 > 将命令的输出定向到一个文件 比如echo 1 > file1 显示器上输出的将保存到file1文件中。 如果已有数据>将覆盖数据。 >>不覆盖而追加数据。

输入重定向 < 将文件内容定向到命令 wc 记录文本 行数 次数 字节数 wc < file1 将file1 文件定向到wc 来输出file1的文本记数 << 内联重定向 不需要文件,手动输入数据就行。
内联重定向时候会用P2S环境变量中的次提示符来提示输入数据。一般这个符号是EOF

管道符 将一个命令的输出作为另一个命令的输入。

expr 数学预算 expr 1 + 5 输出6 。 expr 可以用美元符号加方括号 [ ] 来 执 行 数 学 运 算 。 只 支 持 整 数 运 算 b c 是 b a s h 计 算 器 可 以 用 于 浮 点 输 入 b c 进 入 b c 运 算 器 , q u i t 才 能 退 出 其 中 s c a l e 是 s h e l l 脚 本 内 建 变 量 中 需 要 保 存 浮 点 数 的 小 数 位 数 比 如 s c a l e = 4 保 留 4 位 小 数 。 b c − q 不 显 示 b c 的 欢 迎 信 息 。 可 以 使 用 替 换 a = []来执行数学运算。 只支持整数运算 bc 是bash计算器 可以用于浮点 输入bc 进入bc运算器, quit才能退出 其中scale 是shell脚本内建变量中需要保存浮点数的小数位数 比如scale=4 保留4位小数。 bc -q 不显示bc的欢迎信息。 可以使用替换 a= []bcbashbcbcquit退scaleshellscale=44bcqbc使a=(echo " scale=2;3/5" | dc) ;这样a就是这个bc 3/5保留2位小数的结果。 bc 也能识别输入重定向和内联输入重定向。

退出状态码 ? 上 一 条 已 经 执 行 命 令 的 退 出 状 态 码 。 正 常 成 功 的 退 出 状 态 码 ? 上一条已经执行命令的退出状态码。正常成功的退出状态码 ?退退? 返回0 。错误时候是个正数1-255
exit 5 为 shell脚本指定一个自己的退出状态码

结构化 :

if 和elif 后面都是判断 命令 里面都可以嵌套 else (if elif!!!!!)

if command 1、如果执行第一个command 返回状态码是0
then 2、才执行then 后面的命令。
commands
else
then
fi

或者
if command
then
commands
elif commands
then
commands
fi

test 命令

if command 1、 command不会执行
test 2、 判断上面的command条件是否正确,正确直接返回0.不成立返回非0状态码。
then
commands
fi

test 另一种测试方法 if 后面用 [ condition ] 方框前后要有空格。
test 用于三大条件 1数值比较 2字符串比较 3文件比较。
数值比较: -eq 相等 -ge 大于等于 -gt大于 -le 小于等于 -lt 小于 -ne 不等于
字符串比较: = != < > -n 长度是否非0 -z 长度是否为0 大于小于号要转义! > <
文件比较: -d 是否是目录 -e是否存在 -f是否是文件 -r是否可读 -s 是否存非空 -w是否可写 -x 是否可以执行 -O是否属于当前用户 -G 是否属于当前用户组 A -NT B 是否A比B新, A -ot B是否A比B旧。

if text高级特性:
可以用 [ condition ] && [ condition ] AND
可以用 [ condition ] || [ condition ] OR

用于数学表达式的双括号if (( 1 + 2 >3 )) 括号里面可以使用任意数学赋值或者比较表达式
用于字符串的双方括号 if[[ $USER == r* ]] 双括号里面呢可以提供匹配模式。

case 结构 case 开头esac 结束

case $USER in

apple | banana)
echo 1111;

orange)

echo 2222;
*)
echo 3333;
)
echo 4444;
esac

for 循环

for var in list
do
echo v a r ; 每 次 遍 历 l i s t 时 会 将 新 值 赋 给 v a r 用 var; 每次遍历list 时会将新值赋给var 用 var;listvarvar 引用
done

list 中有复杂值时候 用\转义 或者用双引号“”包裹 ‘’单引号成 一个元素。 $()输出赋给一个变量 `` 也行 。()是命令列表。会形成一个shell进程

C风格for循环

for(( i = 0;i<10;i++ ))
do

done

while test command
do

done

until与while相反

until test command 命令不为0,不正确的时候才执行。
do

done

break 退出循环 continue 跳出某次循环

for file in ./*
do
if [ -x $file ] 1、如果文件有执行权限
then
2、执行里面的command
fi
done

shell输入参数 $0 是程序名 $1 是第一个参数 $2 是第二个参数 ∗ 和 *和 @返回所有参数 KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲是参数个数 。最后执行返回的是?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值