Shell的定义

Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等。 用户每输入一条命令,Shell就执行一条。这种从键盘输入命令,就可以立即得到回应的对话方式,称为交互的方式。
当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,该程序文件就被称为Shell脚本。 在Shell脚本里内置了很多命令、语句及循环控制,然后将这些命令一次性执行完毕,这种通过文件执行脚本的方式称为非交互的方式。 Shell脚本语言很适合用于处理纯文本型的数据,而Linux系统中几乎所有的配置文件、日志文件,以及绝大对数的启动文件都是纯文本类型的文件。

[root@localhost ~]# cat /etc/shells
/bin/sh (指向/bin/bash)
/bin/bash (默认shell类型)
/usr/bin/sh
/usr/bin/bash

shell脚本:

​ 关键字

​ Linux命令

​ shell自带命令

​ 函数

​ 控制语句

.sh 作为文件后缀,代表是shell脚本

/etc/profile ~/.bash_profile ~/.bashrc ~/etc/bashrc(以最后一个生效)

shell脚本类型:

脚本书写规范

​ #!/bin/bash

添加注释信息

#日期,#作者,#作用,#版本,#联系方式…

#Date:2022-6-12

#Author:

#Desc:

#Vers:

#Email:

文件名后缀 .sh

shell脚本执行:

shell脚本编写规范:
写shell脚本时,命令用反单引号括起来``
设置变量 name=upper(等号两边不能有空格)

成对的符号,建议一次性写完 () {} [] ’ ’ " " ``

对于流程控制语句,应一次性将格式写完,再添加内容。缩进最好空四个


if  []then(注意缩进)fi

for do ...done

变量

变量赋值方法

​ 变量名="值 "(=左右两边没有空格)

​ echo $变量名(进行输出)

对于环境变量:变量名大写

​ set命令:查看环境变量
env命令:查看全局变量
declare:用来做定义
unset NAME:取消变量/删除变量
    eg :
      # unset A 撤销变量 A
      # readonly B=2 声明静态的变量 B=2 ,不能 unset
用户自定义只在set中有;env中没有


自定义环境变量

​ (仅在当前环境有效)

​ 1、export 变量名=值

​ 2、变量名=值;export 变量名

​ 3、declare -x 变量名=值

赋值用= ; 相等用==

用户级环境变量

~/.bashrc

全局环境变量

/etc/profile

/etc/bashrc

/etc/profile.d:存放脚本

取消环境变量:unset 变量名

局部变量

变量名=值
变量名=‘值’
变量名=“值”
变量名=command
变量名=$(command)
变量数组
特殊变量

赋值时引号的作用:

  • 双引号:允许通过$符号引用其他变量值
  • 单引号:禁止引用其他变量值,$视为普通字符
  • 反撇号:命令替换,提取命令执行后的输出结果 全局变量的定义方法 export 变量名

字符串变量:

数组:

获取数组元素:

位置变量!!!

​ $0 获取当前shell脚本文件名

​ $n (n>0) 代表参数值

$@ 代表命令行中所有的参数
$# 代表命令行中所有参数的个数
$* 代表命令行中所有的参数

$? 获取上一条命令执行的状态返回值 0代表成功,非0代表失败
$$ 获取当前shell的进程ID
$! 获取上一个后台程序的进程ID(后台运行的最后一个进程号)
$_ 获取上一条命令或者脚本的最后一个参数

命令变量传递用法

echo

-n
-e
\t 制表符
\v 垂直制表符
\n 换行符
\r 回车
\b 退格

read

read option 变量名
-t 等待事件
-p 提示信息
${parameter:-word} 变量为空或未赋值,用word代替
${parameter:=word} 变量为空或未赋值,把变量值设置为word
${parameter:?word} 变量为空或未赋值,把word当作报错信息
${parameter:+word} 变量为空或未赋值,什么都不做,否则替换为word
-d 定界符 遇到这个字母终止读取
-e 交互式
-n:字符限制
-r:搭配/ 换行,表示未终止
-s:输入时字符不回显

read交互式

运算符:

+ - * / % 加 减 乘 除 取余
++ –
** 幂运算(自己乘自己)
== !=
< <= > >=
= += -= *= /= %=
&& || ! 与 或 非

(())
let (let赋值表达式)

$[]

bc 交互式运行,Ctrl+c退出

expr (运算时,运算符号和数字之间要有空格)

declare

(())
((i=i+1))
i=((i+1))
((2>1&&1=1)) 0代表flase 1代表true

条件测试:

test测试表达式
[ 测试表达式 ] !!!注意中括号两边空格
[[ 测试表达式> ]]
(( 测试表达式 ))



整数二元比较操作符:

逻辑操作符:

文件测试:

-d 文件存在且为目录则为真
-f 文件存在且为普通文件则为真
-e 文件存在则为真
-r 文件存在且可读则为真
-s 文件存在且大小不为0则为真
-w 文件存在且可写则为真
-x 文件存在且可执行则为真
-L 文件存在且为链接文件则为真
f1 -nt f2 newer than f1比f2新则为真
f1 -ot f2 older than f1比f2旧则为真

字符串测试:

-n 长度不为0则为真
-z 长度为0则为真
“str1” = “str2” 两个字符串相等为真,等号两端需要有空格,字符串需要加引号
“str1” != “str2” 两个字符串不相等为真,等号两端需要有空格,字符串需要加引号

整数比较

[] test
-eq
-ne
-gt
-ge
-lt
-le
[[]] (())
== =
!=
>
>=
<
<=

练习题1:

1、


2、

练习题2:
编写一个计数器:(注意expr格式要求很严格)


练习题3:
编写shell脚本获取用户的输入,
1、当用户输入的内容是文件时,输出文件内容,如果文件是shell脚本,则判断是否有执行权限,没有则添加,有则直接执行
2、当用户输入的内容是目录时,则输出目录下的内容
3、当用户输入一个链接文件时,可以查看此链接文件
4、当用户输入的内容不在此系统中,则提示“您输入的文件或目录不存在!”

cut:数据剪切
-b:以字节进行切割
-c:以字符切割
-d:指定分割符
-f:搭配-d使用指定显示那个区域

练习题4:

case 条件判断语句
case条件语句相当于多分支的if/elif/else条件语句,但是它比这些条件语句看起来更规范更工整,常被应用于实现系统服务启动脚本等企业应用场景中。

case  变量  inone)命令
;;two)命令
;;*)   #*代表剩下的其他的命令
esac

for循环语句

for  条件
do命令
done##或for  条件;do命令
done

(seq序列)

(遍历数组中元素)

while循环语句

while  条件
do命令
done


break、continue、exit 循环控制语句
break 、continue在条件语句及循环语句(for、while、if等)中用于控制程序走向;而exit则用于终止所有语句并退出当前脚本。

shell函数

Shell 函数定义的语法格式如下:

function name() {statements[return value]
}

说明:
function是 Shell 中的关键字,专门用来定义函数;
name是函数名;
statements是函数要执行的代码,也就是一组语句;
return value表示函数的返回值,其中 return 是 Shell 关键字,
专门用在函数中返回一个值;这一部分可以写也可以不写。
由{ }包围的部分称为函数体,调用一个函数,实际上就是执行函数体中的代码。

函数调用
调用 Shell 函数时可以给它传递参数,也可以不传递。如果不传递参数,直接给出函数名字即可:
name
如果传递参数,那么多个参数之间以空格分隔:
name param1 param2 param3
不管是哪种形式,函数名字后面都不需要带括号。
和其它编程语言不同的是,Shell 函数在定义时不能指明参数,但是在调用时却可以传递参数,并且给它传递什么参数它就接收什么参数。
练习1、定义一个函数,计算所有参数的和:

#!/bin/bash
function getsum(){local sum=0
for n in $@
do((sum+=n))
done
return $sum
}
getsum 10 20 55 15 #调用函数并传递参数
echo $?
#$@表示函数的所有参数,$?表示函数的退出状态(返回值);
#此处我们借助 return 关键字将所有数字的和返回,并使用$?得到这个值,这种处理方案在其它编程语言中没有任何问题,
#但是在 Shell 中是非常错误的,Shell 函数的返回值和其它编程语言大有不同。
#函数返回值在调用该函数后通过 $? 来获得。
#local命令表示声明的变量是本地变量,多在函数内部使用

例子:(磁盘使用率)



Shell 输入/输出重定向


练习2、编写一个计算器(使用函数)

> #!/bin/bash
cat << EOF
———————————————————————
欢迎使用shell计算器
1、加法
2、减法
3、乘法
4、除法(除数不为0)
5、幂运算
6、退出
———————————————————————
EOF
function addition() {add=$((a+b))echo "a+b为:"$add
}
function subtraction() {sub=$((a-b))echo "a-b为:"$sub
}
function multiplication() {mul=$((a*b))echo "a*b为:"$mul
}
function division() {div=$((a/b))echo "a/b为:"$div
}
function mi_yunsuan() {mi=$((a**b))echo "a**b为;"$mi
}
while [[ True ]]
doread -p "请输入运算类型:" iread -p "请输入两个数进行计算:" a bcase $i in1)additioncontinue;;2)subtractioncontinue;;3)multiplicationcontinue;;4)divisioncontinue;;5)mi_yunsuancontinue;;6)echo "运算结束,退出!"breakesac
done



mail命令

查看有没有postfix,如果有的话进行卸载(yum remove postfix)

安装mail命令:yum -y install mailx
详细过程进入此链接

set from=13259011323@163.com #此处设置发件人的信息
set smtp=smtp.163.com #此处配置对应邮箱的stmp服务器
set smtp-auth-user=13259011323@163.com #此处配置发件人邮箱地址
set smtp-auth-password=TXFJCVVAQXORJNSR #客户端授权码,不是邮箱地址密码
set smtp-auth=login
注意:

[root@localhost tmp]# systemctl restart network #添加完DNS要重启网卡
[root@localhost ~]# echo "Content" | mail -s "Title" 1151939762@qq.com #发邮件
注意:
echo "发送的内容" | mail -s "标题" 发送的邮箱

(接近实战的shell)

检测CPU使用率、检测磁盘使用率、检测内存使用率
1、检测CPU使用率
top命令

使用压缩命令占满CPU,再执行top命令进行查看

下面命令会创建 CPU 负荷,方法是通过压缩随机数据并将结果发送到 /dev/null:

cat /dev/urandom | gzip -9 > /dev/null

cat /proc/stat

cpu利用率=(user_pass + system_pass)*100%/(user_pass + system_pass + idle_pass)


2、磁盘的使用率

df -h命令查看


3、内存的使用率

free -m

使用量除以总量 看百分比

(超详细)Linux Shell 编程相关推荐

  1. Linux Shell 编程学习总结

    Shell 教程 Shell简介:什么是Shell,Shell命令的两种执行方式 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成 ...

  2. linux实验三shell程序设计,实验三 LINUX SHELL编程

    精选文库 -实验三LINUX SHELL 编程 四.实验内容 本实验包含两个具体的SHELL程序编写任务,较为全面地涉及了SHELL 程序的设计方法和技术.内容如下: 1.创建以下菜单程序: USER ...

  3. linux —— shell 编程(文本处理)

    导读 本文为博文 linux -- shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed a ...

  4. 【“计算机科学与技术”专业小白成长系列】Linux Shell 编程 极简教程

    Linux Shell 编程 极简教程 内容摘要 本文是 Linux Shell 编程简单入门.主要内容: Linux 简介 Shell 编程入门 Kotlin 脚本与 Shell 脚本 Linux ...

  5. 《Linux Shell编程从初学到精通(第2版)》pdf

    下载地址:网盘下载 内容简介 编辑 shell是用户与内核进行交互操作的一种接口,是linux最重要的软件之一.目前最流行的shell称为bash shell,bash shell脚本编程以其简洁.高 ...

  6. linux简单重定向代码,Linux Shell编程(26)——代码块重定向

    像 while, until, 和 for 循环代码块, 甚至 if/then 测试结构的代码块都能做到标准输入的重定向. 即使函数也可以使用这种重定向的格式 .所有的这些依靠代码块结尾的 < ...

  7. Linux Shell编程语句case

    Linux Shell编程case语句 case语句 case语句适用于需要进行多重分支的应用情况. case分支语句的格式如下:case $变量名 in模式1)命令序列1;;模式2)命令序列2;; ...

  8. linux shell 处理日语,linux —— shell 编程(文本处理)

    导读 本文为博文linux -- shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 1.基本文本处理 sort:用于排序,常 ...

  9. linux怎么退出shell编程,Linux Shell编程(11)——退出和退出状态

    exit命令一般用于结束一个脚本,就像C语言的exit一样.它也能返回一个值给父进程. 每一个命令都能返回一个退出状态(有时也看做返回状态).一个命令执行成功返回0,一个执行不成功的命令则返回一个非零 ...

  10. 超详细Linux 安装Mysql

    超详细 Linux 安装Mysql 1.下载方式 1.1 Linux 内部下载(不推荐,比较慢) 1.2 本地下载,上传到linux 2.解压 3.创建MYSQL⽤户和⽤户组 4.配置my.cnf 5 ...

最新文章

  1. 国内IT图书出版的未来之路
  2. nginx连接php-fpm sock文件失败502
  3. 解决JavaWeb项目代码报错
  4. jquery通过ajax提交form
  5. CAN总线的初步认识
  6. Flutter 1.17 | 2020 首个稳定版发布!
  7. option标签selected=selected属性失效的问题
  8. 互联网晚报 | 8月28日 星期六 | 我国网民规模超10亿;vivo首款自研影像芯片下月首发;同程艺龙拟改名为同程旅行...
  9. Python使用pdfkit、wkhtmltopdf将html转换为pdf错误记录文档
  10. 区块链支付平台技术的应用
  11. java byte转十六进制_Python 十六进制hexbytesstr之间的转换和Bcc码的生成
  12. 智引IT综合管理解决方案
  13. Avast! 4 Server 服务器版license许可文件获得方法
  14. 计算机学打字教案小学,6 用金山打字通练指法
  15. vue lic在element-ui中使用阿里巴巴矢量图标库iconfont图标
  16. 世链投研|链游操作指南之MIR4
  17. UBOOT下自定义显示BMP图片
  18. 在线视频插上“大数据翅膀”
  19. 永恩上线服务器维护,LOL10.16永恩BUG商城问题介绍-LOL10.16永恩BUG商城问题有哪些_牛游戏网...
  20. python 拆包_python 拆包

热门文章

  1. Android 安装腾讯X5内核
  2. 硅谷新传奇Kevin Systrom
  3. 程序员计算器使用方法介绍(快速计算十六进制、八进制的方法)
  4. 用360安全卫士批量本地快速给系统打补丁【转贴】
  5. 普元EOS 工作流引擎相关数据表介绍
  6. win10超好看的鼠标主题,你也来试试吧
  7. jQuery源码分析(一)
  8. 如何彻底卸载Mysql数据库软件
  9. vs 2017 linux版本,vs2017 linux版
  10. Python3 安装RobotFramework