您的位置:首页 > 运维架构 > Shell

linux Shell编程的基本语法及案例实现(不看后悔系列)

2020-07-14 05:52 316 查看

SHELL编程

一、基础知识

1、环境变量
1)env命令:显示当前系统所有的环境变量
2)自定义环境变量
a.export 定义环境变量 (临时)
如:export ABC=123 (export 所定义的环境变量,只是暂时有效,重启就没了)
env命令查看下
echo ABC提取下b./etc/profile定义环境变量(永久)加上一句:exportABC=123接着运行source/etc/profile或者重启永久生效,用env查看。2、PATH环境变量在LINUX系统中,当我们输入一个命令时,LINUX系统是通过PATH变量来搜索命令的,PATH变量的值就是一个目录集合,系统会按按照顺序查找这些目录,如果找不到,则提示命令未找到。PATH路径的修改需注意,不可以直接对其赋新值,否则将覆盖PATH现有的值。对PATH变量修改的正确方法是在原来的基础上修改在赋值是需要引用旧值如:PATH=ABC 提取下 b./etc/profile 定义环境变量(永久) 加上一句:export ABC=123 接着运行 source /etc/profile 或者重启永久生效,用env查看。 2、PATH环境变量 在LINUX系统中,当我们输入一个命令时,LINUX系统是通过PATH变量来搜索命令的,PATH变量的值就是一个目录集合,系统会按按照顺序查找这些目录,如果找不到,则提示命令未找到。 PATH路径的修改需注意,不可以直接对其赋新值,否则将覆盖PATH现有的值。 对PATH变量修改的正确方法是在原来的基础上修改在赋值是需要引用旧值 如:PATH=ABC提取下b./etc/profile定义环境变量(永久)加上一句:exportABC=123接着运行source/etc/profile或者重启永久生效,用env查看。2、PATH环境变量在LINUX系统中,当我们输入一个命令时,LINUX系统是通过PATH变量来搜索命令的,PATH变量的值就是一个目录集合,系统会按按照顺序查找这些目录,如果找不到,则提示命令未找到。PATH路径的修改需注意,不可以直接对其赋新值,否则将覆盖PATH现有的值。对PATH变量修改的正确方法是在原来的基础上修改在赋值是需要引用旧值如:PATH=PATH:/root

二、Shell script

1、shell script 就像是早期 DOS 年代的批处理(.bat),最简单的功能就是将许多命令写在一起,让使用者很轻易地就能够一下子处理复杂的操作(运行一个文件“shell script”,就能够一次运行多个命令)。而且shell script更提供数组、循环、条件与逻辑判断等重要功能,让用户也可以直接以shell来撰写程序,而不必使用类似C程序语言等传统程序撰写的语法。

2、在Linux系统中,如果计算机插入一个USB设备,需要用挂载命令才能实现这个设备的加载。可以把USB的挂载与文件的复制写成一个shell程序,这样可以通过程序的运算自动完成很多步骤的操作,程序的功能如下:
运算程序时,提示用户输入“y”或“n”,确定是不是挂载USB设备。
如果用户输入“y”,则挂载这个USB设备
提示用户输入“y”或“n”,确定是不是复制文本
如果用户输入“y”,则显示文件列表,然后提示用户是否复制文件
程序根据用户输入的文件名复制相应的文件,然后提示是否将计算机中的文件复制到USB中
完成文件的复制以后,提示用户是否卸载USB设备

三、shell入门

编写规范:
1、代码规范
#!/bin/bash //指定告之系统当前这个脚本要使用的shell解释器
Shell 相关指令

2、文件命名规范
文件名.sh

使用流程
1、创建.sh文件
2、编写shell代码
3、执行shell脚本

四、变量

1、变量命名规则同C语言(所有语言都一样)
AB1=”hello world”
(案例1)
2、变量引用$ AB1
注意:双引号能够识别变量,双引号能够实现转义(案例3)
3、通过键盘给变量赋值
语法:read -p 提示信息 变量名
(案例5)
4、删除变量
语法:unset 变量名
(案例6)

五、选择结构

语法1:单分支
If 条件

then
command1
command2
……
fi

语法2:双分支

If 条件

then
command1
command2
……
else

command
……
fi

语法3:多分支

If 条件1
then
command1
elif条件2
then
command2
……
else
command…
fi

六、运算符

常见运行符有运算数运算符、关系运算符、逻辑运算符、字符串运算符、文件测试运算符

1、算术运算符
+’ - * / %( 取余) == !=
注意原生bash不支持简单的数学运算,但是可以通过其他命令来实现,如expr。expr是一款表达式计算工具,使用它能完成表达式的求值操作(案例7)(案例8)
2、关系运算符
-eq (equal)判断两个数是否相等,相等返回true
-ne (not equal)判断两个数是否相等,不相等返回true
-gt (great than)检测左边的数是否大于右边的,如果是,则返回true
-lt (less than)检测检测左边的数是否小于右边的,如果是,则返回true
-ge (great than or equal )检测左边的数是否大于等于右边的,如果是,则返回true
-le (less than or equal )检测左边的数是否大于等于右边的,如果是,则返回true
(案例9)

3、逻辑运算符
! (非运算 ) -o(或运算 ) -a(与运算 )(案例9.2)

4、字符串运算符
= 检测字符串长度是否相等,相等为true
!= 检测字符串长度是否为不相等,相等为true
-z 检测字符串长度是否为0,为0返加true
-n 检测字符串长度是否为0,不为0返加true
str 检测字符串是否为空,不为空返回true
(案例10)

5、文件测试运算符(其它语言没有的)
-d file 检测文件是否是目录,如果是,则返回true
-f file 检测文件是否是普通文件,如果是,则返回true
-r file 检测文件是否可读,如果是,则返回true
-w file 检测文件是否可写,如果是,则返回true
-x file 检测文件是否可执行,如果是,则返回true
-s file 检测文件是否为空,如果是,则返回true
-e file 检测文件(包括目录)是否存在,如果是,则返回true(案例11)

七、循环结构

while 表达式
do
命令列表
done

(案例12)

案例1:创建test1.sh实现一个shell脚本程序

#!/bin/bash
echo ” hello world”

存盘后退出vim,对这个文件加执行权限
chmod a+x test1.sh
脚本执行的方式1:运行时一定要完成路径或者写清楚当前路径(./test.sh),而不是test1…sh,运行其它二进制的程序也一样,直接写tesh.sh,linux系统会去PATH(环境变量)里寻找有没有叫test1.sh ,而只有/bin,/sbin,/usr/bin,/usr/sbin等在PATH里,你的当前目录通常不在PATH里,所以写成test1.sh是会找不到命令的。要用./test.sh告诉系统,就在当前目录找。

脚本执行的方式2 :/bin/bash 脚本路径
脚本执行的方式3:/bin/sh 脚本路径 (sh是bash的快捷方式)

案例1的实现:

  1. 创建一个 test1.sh的可执行文件:

  2. 将他的权限改为所有人都可执行:

  3. 编写代码:

  4. 执行test1.sh文件:

案例2:使用root用户帐号创建并执行test2.sh,实现创建一个shelltest用户,并用ls显示其家目录

案例2的实现:

前两步和案例1一样这里直接跳过

1.编写代码:


2.执行test2.sh文件:

我们可以看见在home目录下有shelltest目录说明该用户创建成功

案例3:使用变量向屏幕输出”hello world”,脚本程序名test3.sh

案例3的实现:

前两步和案例1一样这里直接跳过
1.编写代码:


2.执行test3.sh文件:

案例4:定义一个变量,要求格式为”年-月-日 时:分:秒”, 脚本程序名test4.sh

案例4的实现:

前两步和案例1一样这里直接跳过

1.编写代码:

2.执行test4.sh文件:

案例5:要求执行之后提示用户输入文件的名称(带有路径),然后自动为用户创建文件, 脚本程序名test5.sh

案例5的实现:

前两步和案例1一样这里直接跳过

1.编写代码:

2.执行test5.sh文件:

创建成功

案例6:定义变量b=20,再输出b的值,随后删除b,最后再输出b

案例6的实现:

前两步和案例1一样这里直接跳过

1.编写代码:


2.执行test6.sh文件:

这里20下面是个空字符说明变量被删除

案例7:注意原生bash不支持简单的数学运算,但是可以通过其他命令来实现,如expr。expr是一款表达式计算工具,使用它能完成表达式的求值操作例 : 脚本程序 test7.sh

案例7的实现:

前两步和案例1一样这里直接跳过

1.编写代码:

2.执行test7.sh文件:

案例8:加减乘除操作:脚本程序 test8.sh

案例8的实现:

前两步和案例1一样这里直接跳过

1.编写代码:


这里注意格式问题:echo后面加空格,单引号不转义,双引号转义,[]左右加空格

2.执行test8.sh文件:

案例9 脚本程序 test9.sh 使用a=10,b=20验证关系运算符

案例9的实现:

前两步和案例1一样这里直接跳过

1.编写代码:


2.执行test9.sh文件:

案例9.2 脚本程序 test9.2.sh 使用a=10,b=20验证逻辑运算符

案例9.2的实现:

前两步和案例1一样这里直接跳过

1.编写代码:

2.执行test9.2.sh文件:

案例10 脚本程序 test9.2.sh 使用a=10,b=20验证逻辑运算符

案例10的实现:

前两步和案例1一样这里直接跳过

1.编写代码:

2.执行test10.sh文件:

案例11脚本程序 test11.sh 验证文件测试运算符先准备文件 /root/aaa.txt

案例11的实现:

前两步和案例1一样这里直接跳过

1.创建文件/root/aaa.txt:


2.编写代码:


3.执行test11.sh文件:

案例12 案例12:向屏幕输出1、2、3…………20

案例12的实现:

前两步和案例1一样这里直接跳过

1.编写代码:



2.执行test12.sh文件:

跟着老师笔记制作,制作不易给波关注吧 qaq

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: