目录
[条件判断:(使用echo $?来判断条件结果,0为true,1为false)](#条件判断:(使用echo $?来判断条件结果,0为true,1为false))
部分图片截取自【尚硅谷Linux系统管理教程(linux系统管理精讲)】https://www.bilibili.com/video/BV1ut411a7ro?vd_source=4aa5c9ca48e929b37821b89859f00208B仅供学习使用,感谢!
echo改字体颜色和字体背景颜色

bash 基本功能:
①。查看历史输入命令history,最大存储在磁盘1000条,可进入/etc/profile进行修改HISTSIZE=1000,进行扩充;
补充:可以使用上下箭头进行历史命令的切换,也可以使用"!历史命令行号"
②。命令改别名alias,进入/root/.bashrc可进行修改,使用source /root/.bashrc进行更新,可使用"unalias 别名"进行删除
加入--color=auto显示颜色
③。错误输出重定向追加保存:"错误命令 2>> 文件"(只能保存错误命令)
正确输出和错误输出同时重定向追加保存:" 命令**>>文件2>&1****"** / " 命令 &>> 文件 "
分别保存正确错误文件:" 命令**>>文件12>>文件2**"
④。多命令顺序执行:
1)。";" 顺序执行多命令并结果互不影响
2)。"&&" 前者正确,执行后者
3)。" || " 前者错误,执行后者
⑤。bash中其他特殊符号(重点注意)
''单引号,所见即所得,不能在单引号内再使用单引号。
""双引号,拥有"调用变量的值","引用命令","转义字符"的特殊含义,双引号可以嵌套单引号,但不能直接嵌套双引号或反引号。
`` 反引号,其括起来的内容是系统命令,可以调用系统命令将结果赋值给一个变量例如:a=`ls /root`
$() 和反引号作用一样,用来引用系统命令。(推荐使用)
() 用于一串命令执行时,()中的命令会在子shell中运行(相当于执行局部变量)
{} 用于一串命令执行时,{}中的命令会在当前shell中执行,也可以用于变量变形与替换 (相当于执行全局变量)
⑥。bash快捷键
查看系统所有快捷键:stty -a
修改系统快捷键:stty 关键字 快捷键
运行方式: 推荐使用第二种方法
①.bash/sh + 绝对/相对路径
②.赋予执行权限chmod +x 文件,以后可以直接用路径调用不需要加bash/sh(相对路径要加./)
③.脚本路径前加".空格"或者source
变量类型
①.预定义变量
$? 功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值非0(具体实施那个数,有命令自己来决定),则证明上一个命令执行不正确
查看当前进程的进程号(PID) $! 后台运行的最后一个进程的进程号(PID ②。环境变量 常用系统变量$HOME ,$PWD,$SHELL,$USER 查看系统变量值:echo $HOME 1)。PATH:系统查找命令的路径 PATH变量的值是用":"分割的路径,这些路径就是系统查找命令的路径。也就是说当我们输入一个程序名,如果没有写入路径,系统就会到PATH变量定义的路径中去寻找,是否有可以执行的程序。如果找到则执行,否则会报"命令没有发现"的错误 自已定义的脚本也可以通过将脚本复制到PATH变量定义的路径中,或者使用PATH="$PATH":/root/sh修改PATH变量的值进行叠加,就可以不输入路径而直接运行 2)。PS1变量:命令提示符设置 PS1,是用来定义命令行的提示符,可以按照我们自己的需求来定义自己喜欢的提示符,PS1支持以下这些选项  3)LANG语系变量 LANG变量定义了Linux系统的主语系环境,这个变量的默认值  可以使用locale -a \| more来查看支持的语系 4)环境变量配置文件调用过程  ③。位置参数变量 特殊变量 $n 功能描述:n为数字,$0代表脚本名称,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10} $# 功能描述:获取所有输入参数个数,常用于循环 $\* 功能描述:这个变量代表命令行中的所有参数,$\*把所有的参数看成了一个整体 $@ 功能描述:这个变量也代表命令行中的所有参数,不过$@把每一个参数区分对待 举例   ④.自定义变量 基本语法: 定义变量:变量名=变量值,注意=前后不能有空格(定义变量不需要加$,调用变量需要给变量前加$) 撤销变量:unset 变量名 声明静态变量:readonly 变量,注意:不能unset 使用"export 变量(declare -x 变量)"可以把变量升级为全局(环境)变量,供其他变量使用(例如将父shell继承给子shell) 变量连接:变量="$变量"连接值 变量定义规则: 变量名称由字母,数字,下划线组成,不能以数字开头,环境变量建议大写 等号两侧不能有空格 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算 变量的值如果有空格,需要使用双引号和单引号括起来  ## **字符串处理:** ①。cut列提取命令 cut \[选项\] 文件名 选项: -d 分隔符:按照指定分隔符进行分列 -f 列号:提取第几列,一般与-d联用,**cut** **命令的默认分隔符为制表符** **tab** **键,不对空格支持** -c 字符范围: 不依赖分隔符来区分列,而是通过字符范围(行首为1)来进行字段提取。"n-"表示从第n个字符到行尾;"n-m"从第n个字符到第m个字符;"-m"表示从第一个字符到第m个字符。 ②。 Awk 列数表示直接为"$数字" 可以使用"-F 分隔符"来进行分割,注意引号的使用  1)。printf 输出   2)。 awk基本使用 awk '条件1 {动作1} 条件2 {动作2}....' 文件名 (动作写在{}中,转义字符和字符串需要用""括起来, awk解决cut不能处理的空格问题)     3)awk内置变量    注意:当使用FS时,可能第一行没有起作用,可能是需要加BEGIN条件 ③。sed命令 列数表示直接为数字 sed命令主要是用来将数据进行选取,替换,删除,新增的命令 格式:sed \[选项\] '\[动作\]' 文件名     注意:1)如果想追加或插入多行数据,除最后一行外,每行的末尾都要加入"\\"代表数据未完结; 2)-d只有行删除,没有具体的字符串删除功能,可以使用s将字符串替换为空,即可达到删除字符串的效果 3)多条动作之间要用";"号或回车进行分割(一般与-e配合使用),当使用-e对多条命令进行编辑时,要与命令紧挨使用,中间不能有其他选项 4)指定行范围可以用","例如1,3表示第一行到第三行 ④。排序命令sort 格式:sort \[选项\] 文件名  补充:-k 指定字段号,一般与-t搭配使用,当-t分割后可以选择指定字段号;"-k 3"表示从第三个字段到行尾排序 ⑤。uniq命令 uniq命令是用来取消重复行,其实和"sort -u"是一样的 格式:uniq \[选项\] 文件名 选项:-i: 忽略大小写 ⑥。统计命令wc 格式:wc \[选项\] 文件名 选项:-l: 只统计行数 -w :只统计单词数 -m:只统计字符数 ## **条件判断:** (使用echo $?来判断条件结果,0为true,1为false) 基本语法:①.test 判断条件 ②.\[ 判断条件 \] (注意条件前后距离\[\]要有空格,等号前后也要有空格) 常用判断条件: ①.两个整数之间比较  ②.按照文件权限进行判断  ③.按照文件类型进行判断   ④.两个文件之间进行比较  ⑤。字符串比较  ⑥。多重条件比较  ## **条件语句:** 注意:条件判断式不用再额外加中括号,例子多加了一层中括号 ①.if判断基本语法: 单分支: if \[ 条件判断式 \];then 程序 fi 或者 if \[ 条件判断式 \] then 程序 fi 多分支: if \[ 条件判断式 \] then 程序 elif \[ 条件判断式 \] then 程序 else 程序 fi 注意事项:\[ 条件判断式 \],中括号和条件判断式之间必须要有空格,if后要有空格  ②.case语句基本语法 case $变量名 in "值1") 如果变量的值等于值1,则执行程序1 ;; "值2") 如果变量的值等于值2,则执行程序2 ;; ...........省略其他分支 \*) 如果变量的值都不是以上的值,则执行此程序 ;; esac 注意事项:①case行尾必须为单词"in",每一行模式匹配必须以右括号")"结束 ②双分号";;"表示命令序列结束,相当于break ③最后的"\*)"表示默认模式,相当于default  ## **循环语句** 并发控制(补充) \& 将程序放置后台运行 Wait 允许脚本等待一个或多个后台进程完成 一种做法: for语句 do { 循环体 }\& Wait ①for循环基本语法: for((初始值;循环条件控制;变量变化)) do 程序 done  ② for in循环基本语法: for 变量 in 值1 值2 值3...... do 程序 done  ③$\*,$@基本语法:两个均代表命令行中的所有参数,$\*将所有参数看成一个整体,$@把每个参数区分对待 比较:$\*,$@都表示传递给函数或脚本的所有参数,不被双引号包含时,都以$1 $2 $3.....的形式分开输出所有参数; 当它们被双引号包含时,$\*会以"$1 $2 $3...."按整体的形式输出所有参数,$@以$1 $2 $3.....的形式分开输出所有参数  ④,while/until循环基本语法 while只要条件判断式不成立时跳出循环 until只要条件判断式成立则跳出循环 while/until \[ 条件判断式 \] do 程序 done  ## **特殊流程控制语句** ①,exit语句 系统的exit命令,是用于退出当前用户的登陆状态; 在shell脚本中,exit语句是用来退出当前脚本的,只要碰到exit语句,后续的程序就不再执行 语法:exit \[返回值\] 可以使用$?来查看exit的返回值 ②,break和continue ## **read** **读取控制台输入** 基本语法:read (选项) (参数) 选项:-p:指定读取值时的提示符; -t:指定读取值时等待的时间 (秒)。 -n: 指定接受的字符数 -s: 隐藏输入的数据 参数: 变量:指定读取值的变量名 注意:字符串比较时,等号前后要有空格,否则计算机会识别为赋值语句,定义变量时不要有空格 若输入错误可以ctrl+退格键删除  ## **函数** 系统函数 ①basename 基本语法:basename \[string/pathname\] \[suffix\] 功能描述:basename命令会删掉所有的前缀包括最后一个("/")字符,然后将字符串显示出来。 选项:suffix为后缀,如果suffix被指定了,basename会将pathname或suffix去掉 ②dirname Dirname 文件绝对路径 功能描述:dirname命令会获取所有的前缀路径  自定义函数 基本语法 \[function\] 函数名() { 函数体; \[return int;\] } 经验技巧: ①。必须在调用函数地方之前,先声明函数,shell脚本是逐步运行的,不会像其他语言一样先编译 ②,函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令结果作为返回值,return后跟数值n(0-255)  ## **数组:** 注意:查看和引用数组时需要加{}包裹数组 ①,定义数组 数组名=(元素1 元素2 元素3,元素n) 数组名\[下标\]=变量值 元素定义示例:  ②,查看数组 declare -a \|grep 目标数组 ③,访问数组  ④,关联数组 功能:自定义索引; 语法:先声明关联数组 declare -A 关联数组名 数组名=(\[自定义数组名1\]=值1 \[自定义数组名2\]=值2 ...........) people=(\[p1\]=li \[pi2\]=wang \[p3\]=zhang \[p4\]="ni ba")  ## **切片** 格式:{变量名:起始索引:步长} (注意:步长省略则是截取到末尾,$后面一定要加{}) 