Linux之Shell编程详解

精心整理Shell编程的入门,并配图加代码,方便大家跟着操作,但是难免不了存在纰漏,感谢大家的指正与理解!觉的写的不错的小伙伴儿,一键三连支持一下,后期会有持续更新!!谢谢大家罒ω罒

1. 为什么要学习shell编程

1)Linux运维工程师:编写Shell程序进行服务集群管理。
2)Python和JavaEE程序员:编写Shell脚本程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。大3)数据程序员:编写Shell程序来管理集群。

2. Shell 是什么

Shell 是一个命令解释权,它为用户提供了一个向 Linux 内核发送请求以便运行程序界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。
在这里插入图片描述

3. Shell 编程快速入门

3.1 脚本格式要求

1)脚本要以 #!/bin/bash 开头
2)脚本要有可执行权限

3.2 编写第一个Shell程序

进入 Linux 终端,创建一个myShell.sh的shell文件:
在这里插入图片描述

3.3 脚本的执行方式
  • 方式1(不推荐)
    1)不用赋予权限,直接使用sh命令执行即可
    在这里插入图片描述

  • 方式2
    1)首先给Shell脚本执行权限(+x)
    2)在当前目录执行脚本
    在这里插入图片描述

4. Shell变量

4.1 Shell变量的定义规则

1)变量名可以由字母、数字、下划线组成,不能以数字开头。
2)变量名=变量值,等号两侧不能有空格
3)变量名一般习惯为大写

4.2 Shell变量的介绍
  1. Linux Shell 变量分为系统变量自定义变量
  2. 系统变量有$HOME,$PATH,$USER等
    在这里插入图片描述
  3. 显示当前 Shell 中所有变量:set 。
4.3 Shell变量的基本语法
  • 定义变量:变量名=变量值。
  • 删除变量:unset 变量名 。
  • 声明静态变量:readonly 变量名,静态变量不能unset。
  • 使用变量:$变量名
    在这里插入图片描述
    在这里插入图片描述
4.4 将命令返回值赋给变量(重点)

1)A=` ls ` 反引号,执行里面的命令,返回给A
1)A=$(ls) 等价于反引号
在这里插入图片描述

5. Shell设置环境变量(重点)

5.1 基本语法:

1)export 变量名=变量值,将 Shell 变量输出为环境变量。
2)source 配置文件路径,让修改后的配置信息立即生效。
3)echo $变量名,检查环境变量是否生效

5.2 快速入门:

1)在环境变量文件/etc/profile中,添加自定义的环境变量TOMCAT_PATH
在这里插入图片描述
2)使用命令source /etc/profile,使配置文件生效
在这里插入图片描述
3)查看环境变量TOMCAT_PATH的值
在这里插入图片描述
4)在另一个shell程序中使用环境变量
在这里插入图片描述
在这里插入图片描述

6. 位置参数变量

1)$n :$0 代表命令本身、$1-$9 代表第1到9个参数,10以上参数用花括号,如 ${10}。
2)$* :命令行中所有参数,且把所有参数看成一个整体。
3)$@ :命令行中所有参数,且把每个参数区分对待。
4)$# :所有参数个数。
实例:
在 Shell 脚本 myShell.sh ,输出命令行输入的各个参数信息。
在这里插入图片描述
在这里插入图片描述

7. 预定义变量

在赋值定义之前,事先在 Shell 脚本中直接引用的变量。使用和位置参数使用方式相同。
基本语法
$$ :当前进程的 PID 进程号。
$! :后台运行的最后一个进程的 PID 进程号。
$? :最后一次执行的命令的返回状态,0为执行正确,非0执行失败。

8. 运算符

8.1 基本语法

1)$((运算式)) 或 $[运算式]
2)expr m + n 注意 expr 运算符间要有空格
3)expr m - n
4)expr \ *,/,% 分别代表乘,除,取余

8.2 实例

计算(2 + 3) * 4 = 20;
在这里插入图片描述

推荐使用 $[运算式] 进行操作

9. 条件判断

9.1 基本语法

[ condition ] 注意condition前后要有空格。非空返回0,0为 true,否则为 false 。

9.2 常用判断条件
符号含义符号含义
=字符串比较-r文件有读权限
-lt小于-w文件有写权限
-le小于等于-x文件有执行权限
-eq等于-f文件存在并且是常规文件
-gt大于-e文件存在
-ge大于等于-d文件存在并且是一个目录
-ne不等于

第一列是数字之间的比较,第二列是文件权限和类型进行判断

10. 流程控制

10.1 if 判断
10.1.1 基本语法

if [ 条件判断式 ]
then
  程序
fi

#或者(推荐)
if [ 条件判断式 ]
then
  程序
elif [ 条件判断式 ]
then
   程序
fi

注意:if和中括号之间,条件判断与中括号之间都有空格

10.1.2 实例

编写 Shell 程序:如果输入的参数大于等于60,输出“及格了”,否则输出“不及格”。
在这里插入图片描述在这里插入图片描述

10.2 case分支
10.2.1 基本语法

case $变量名 in
“值1”)
如果变量值等于值1,则执行此处程序1
;;
“值2”)
如果变量值等于值2,则执行此处程序2
;;
…省略其它分支…
*)
如果变量值不等于以上列出的值,则执行此处程序
;;
esac

10.2.2 实例

编写 Shell 程序:当命令行参数为1时输出“周一”,2时输出“周二”,其他情况输出“其它”。
在这里插入图片描述
在这里插入图片描述

10.3 for 循环
10.3.1 基本语法

#语法1
for 变量名 in 值1 值2 值3…
do
  程序
done

#语法2
for ((初始值;循环控制条件;变量变化))
do
  程序
done

10.3.2 实例
  1. 打印命令行输入的参数。(注意$* 和 $@ 的区别)
    在这里插入图片描述在这里插入图片描述

$*是把参数看成整体一个,而$@是把参数看成个体

  1. 输出从1加到100的值。
    在这里插入图片描述在这里插入图片描述
10.4 while循环
10.4.1 基本语法

while [ 条件判断式 ]
do
  程序
done

10.4.2 实例

从命令行输入一个参数n,计算1+…+n的值
在这里插入图片描述在这里插入图片描述

11. 读取控制台输入

11 .1 基本语法

read(选项)(参数)
选项
-p:指定读取值时的提示符
-t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不再等待了。

11 .2 实例
  1. 在控制台输入一个num值。
  2. 在控制台输入一个num值,并且在3秒内输入。
    在这里插入图片描述在这里插入图片描述

12. 函数

和其它编程语言一样,Shell 编程有系统函数自定义函数,本文只举两个常用系统函数。

12.1 系统函数

主要介绍两个

  • basename,删掉路径最后一个 的所有部分(包括/),常用于获取文件名。
    基本语法:
    • basename [pathname] [suffix]
    • basename [string] [suffix]
    • 如果指定 suffix,也会删掉pathname或string的后缀部分。
  • dirname,删掉路径最后一个 / 的所有部分(包括/),常用于获取文件路径。
    基本语法:
    dirname pathname如果路径中不含 / ,则返回 ‘.’ (当前路径)。
    在这里插入图片描述
12.2 自定义函数

基本语法

[ function ] funname[()]
{
 Action;
 [return int;]
}

调用

funname 参数1 参数2

实例

计算输入两个参数的和。
在这里插入图片描述
在这里插入图片描述

本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以选择使用符号模式或绝对模式 7 1.5 目录 7 1.6 suid/guid 7 1.6.1 为什么要使用suid/guid 8 1.6.2 设置suid/guid的例子 8 1.7 chown和chgrp 9 1.7.1 chown举例 9 1.7.2 chgrp举例 9 1.7.3 找出你所属于的用户组 9 1.7.4 找出其他用户所属于的组 10 1.8 umask 10 1.8.1 如何计算umask值 10 1.8.2 常用的umask值 11 1.9 符号链接 12 1.9.1 使用软链接来保存文件的多个映像 12 1.9.2 符号链接举例 12 1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改时间查找文件 17 2.1.7 查找比某个文件新或旧的文件 17 2.1.8 使用type选项 17 2.1.9 使用size选项 18 2.1.10 使用depth选项 18 2.1.11 使用mount选项 18 2.1.12 使用cpio选项 18 2.1.13 使用exec或ok来执行shell命令 19 2.1.14 find命令的例子 20 2.2 xargs 20 2.3 小结 21 第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 3.1.7 删除crontab文件 25 3.1.8 恢复丢失的crontab文件 25 3.2 at命令 25 3.2.1 使用at命令提交命令或脚本 26 3.2.2 列出所提交的作业 27 3.2.3 清除一个作业 27 3.3 &命令 27 3.3.1 向后台提交命令 28 3.3.2 用ps命令查看进程 28 3.3.3 杀死后台进程 28 3.4 nohup命令 29 3.4.1 使用nohup命令提交作业 29 3.4.2 一次提交几个作业 29 3.5 小结 30 第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1 标准输入 40 5.6.2 标准输出 40 5.6.3 标准错误 40 5.7 文件重定向 40 5.7.1 重定向标准输出 41 5.7.2 重定向标准输入 42 5.7.3 重定向标准错误 42 5.8 结合使用标准输出和标准错误 43 5.9 合并标准输出和标准错误 43 5.10 exec 44 5.11 使用文件描述符 44 5.12 小结 45 ... ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

corlor_龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值