系统相关
首页 > 系统相关> > 18.第六章 Shell脚本编程基础入门(一)

18.第六章 Shell脚本编程基础入门(一)

作者:互联网

1.编程基础

Linus:Talk is cheap, show me the code

1.1 程序组成

1.2 程序编程风格

在这里插入图片描述

1.3 编程语言

计算机:运行二进制指令

编程语言:人与计算机之间交互的语言。分为两种:低级语言和高级语言

编译和解释型语言

在这里插入图片描述
1.4 编程逻辑处理方式
在这里插入图片描述
在这里插入图片描述
三种处理逻辑

2.shell 脚本语言的基本用法

2.1 shell 脚本的用途

2.2 shell 脚本基本结构

shell脚本编程:是基于过程式、解释执行的语言

编程语言的基本结构:

shell脚本:包含一些命令或声明,并符合一定格式的文本文件

格式要求:首行shebang机制

#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl

2.3 shell脚本创建过程

第一步:使用文本编辑器来创建文本文件

第一行必须包括shell声明序列:#!

示例:

#!/bin/bash

添加注释,注释以#开头

第二步:加执行权限

给予执行权限,在命令行上指定脚本的绝对或相对路径

第三步:运行脚本

直接运行解释器,将脚本作为解释器程序的参数运行

2.4 shell 脚本注释规范

1、第一行一般为调用使用的语言

2、程序名,避免更改文件名为无法找到正确的文件

3、版本号

4、更改后的时间

5、作者相关信息

6、该程序的作用,及注意事项

7、最后是各版本的更新简要说明

2.5 第一个脚本

#!SHEBANG
CONFIGURATION_VARIABLES
FUNCTION_DEFINITIONS
MAIN_CODE

范例:第一个 Shell 脚本 hello world

参考文档:

https://zh.wikipedia.org/wiki/Hello_World

https://zh.wikipedia.org/wiki/Hello_World%E7%A8%8B%E5%BA%8F%E6%A0%B7%E4%BE%8B

[root@rocky8 ~]# echo $SHELL
/bin/bash

[root@rocky8 data]# vim hello.sh
#!/bin/bash
#
#**********************************************************************************************
#Author:        Raymond
#QQ:            88563128
#Date:          2021-10-08
#FileName:      hello.sh
#URL:           raymond.blog.csdn.net
#Description:   The test script
#Copyright (C): 2021 All rights reserved
#*********************************************************************************************
#经典写法
echo "hello, world"
#流行写法
echo 'Hello, world!'

#执行方法1
[root@rocky8 data]# bash hello.sh 
hello, world
Hello, world!

#执行方法2
[root@rocky8 data]# cat hello.sh | bash
hello, world
Hello, world!

#执行方法3
[root@rocky8 data]# chmod +x hello.sh 
#绝对路径
[root@rocky8 data]# /data/hello.sh 
hello, world
Hello, world!
#相法路径
[root@rocky8 data]# ./hello.sh 
hello, world
Hello, world!

#执行方法4,本方法可以实现执行远程主机的shell脚本
[root@rocky8 data]# yum -y install httpd
[root@rocky8 data]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@rocky8 data]# mv hello.sh /var/www/html/
[root@rocky8 data]# curl -s http://172.31.1.8/hello.sh | bash
hello, world
Hello, world!

范例:备份脚本

[root@rocky8 data]# vim backup.sh
#!/bin/bash
#
#**********************************************************************************************
#Author:        Raymond
#QQ:            88563128
#Date:          2021-10-09
#FileName:      backup.sh
#URL:           raymond.blog.csdn.net
#Description:   The test script
#Copyright (C): 2021 All rights reserved
#*********************************************************************************************
echo -e "\033[1;32mStarting backup...\033[0m"
sleep 2
cp -av /etc/ /data/etc`date +%F_%H-%M-%S`/
echo -e "\033[1;32mBackup is finished\033[0m"

[root@rocky8 data]# bash backup.sh 
Starting backup...
'/etc/' -> '/data/etc2021-10-08_18-39-03/'
'/etc/dnf' -> '/data/etc2021-10-08_18-39-03/dnf'
...
'/etc/nftables/nat.nft' -> '/data/etc2021-10-08_18-39-03/nftables/nat.nft'
'/etc/nftables/router.nft' -> '/data/etc2021-10-08_18-39-03/nftables/router.nft'
'/etc/rsyslog.d' -> '/data/etc2021-10-08_18-39-03/rsyslog.d'
Backup is finished
[root@rocky8 data]# ll
total 16
-rw-r--r--   1 root root  561 Oct  8 18:38 backup.sh
drwxr-xr-x. 84 root root 8192 Oct  8 18:35 etc2021-10-08_18-39-03

2.6 shell 脚本调试

只检测脚本中的语法错误,但无法检查出命令错误,但不真正执行脚本

bash -n /path/to/some_script

调试并执行

bash -x /path/to/some_script

范例:

[root@rocky8 data]# vim test.sh
#!/bin/bash
#
#**********************************************************************************************
#Author:        Raymond
#QQ:            88563128
#Date:          2021-10-09
#FileName:      test.sh
#URL:           raymond.blog.csdn.net
#Description:   The test script
#Copyright (C): 2021 All rights reserved
#*********************************************************************************************
hostname
cat >app.conf <<EOF
line1
line2
line3
EOF
whoami
[root@rocky8 data]# bash test.sh 
rocky8
root
[root@rocky8 data]# ll app.conf 
-rw-r--r-- 1 root root 18 Oct  9 13:49 app.conf
[root@rocky8 data]# cat app.conf 
line1
line2
line3

[root@rocky8 data]# vim test.sh
#!/bin/bash
#
#**********************************************************************************************
#Author:        Raymond
#QQ:            88563128
#Date:          2021-10-09
#FileName:      test.sh
#URL:           raymond.blog.csdn.net
#Description:   The test script
#Copyright (C): 2021 All rights reserved
#*********************************************************************************************
hostname
cat >app.conf <<EOF
line1
line2
line3
line4
EOF  #假如在EOF后边输了个空格
whoami
[root@rocky8 data]# bash test.sh 
rocky8
test.sh: line 18: warning: here-document at line 13 delimited by end-of-file (wanted `EOF')
[root@rocky8 data]# cat -A test.sh
#!/bin/bash$
#$
#**********************************************************************************************$
#Author:        Raymond$
#QQ:            88563128$
#Date:          2021-10-09$
#FileName:      test.sh$
#URL:           raymond.blog.csdn.net$
#Description:   The test script$
#Copyright (C): 2021 All rights reserved$
#*********************************************************************************************$
hostname$
cat >app.conf <<EOF$
line1$
line2$
line3$
line4$
EOF $
whoami$
#用cat -A  查看不可见字符,或者进入vim输入:set list

[root@rocky8 data]# bash -n test.sh 
test.sh: line 18: warning: here-document at line 13 delimited by end-of-file (wanted `EOF')
#用bash -n 先检查语法

[root@rocky8 data]# vim test.sh
#!/bin/bash$
#$
#**********************************************************************************************$
#Author:        Raymond$
#QQ:            88563128$
#Date:          2021-10-09$
#FileName:      test.sh$
#URL:           raymond.blog.csdn.net$
#Description:   The test script$
#Copyright (C): 2021 All rights reserved$
#*********************************************************************************************$
hostname$
cat >app.conf <<EOF$
line1$
line2$
line3$
line4$
EOF$                             
whoami$
[root@rocky8 data]# bash -n test.sh 
[root@rocky8 data]# bash test.sh 
rocky8
root

[root@rocky8 data]# bash -x test.sh 
+ hostname
rocky8
+ cat
+ whoami
root
#bash -x  可以跟踪执行命令

总结:脚本错误常见的有三种

标签:Shell,18,编程,sh,rocky8,root,data,hello,bash
来源: https://blog.csdn.net/qq_25599925/article/details/120750330