当前位置:首页 > Liunx > 正文内容

Shell脚本介绍

邓鹏10个月前 (01-13)Liunx234

今日目标

  • 了解Shell脚本概念

磁盘相关命令回顾:


磁盘相关命令说明
fdisk分msdos分区与要看系统硬盘与分区情况
lsblk查看块设备与其挂载情况
df -h查看已经挂载的文件系统情况
mount也是查看挂载的情况,还能看到挂载的参数(ro或rw等)
iostat需要安装sysstat软件包,动态查看磁盘读写情况
parted高级分区命令,可以分msdos分区与gpt分区
free -m查看内存与swap



编程语言分类介绍

计算机只能识别机器语言(如:01010101001这种), 程序员不能直接去写01这种代码,所以要程序员所编写的程序语言翻译成机器语言。将其他语言翻译成机器语言的工具,称之为==编译器或解释器==。

如:中国人 ---(翻译)----外国人

编译器翻译的方式有两种,一种是编译,一种是解释。区别如下:

1555063146287image.png


  • 编译型语言:

    程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++

  • 解释型语言:

   程序不需要编译,程序在运行时由==解释器==翻译成机器语言,每执行一次都要翻译一次。因此效率比较低。比如Python/JavaScript/ Perl /ruby/Shell等都是解释型语言。

image.png

  • 总结:

编译型语言比解释型语言==速度较快==,但是不如解释型语言==跨平台性好==。如果做底层开发或者大型应用程序或者操作系开发一==般都用编译型语言==;如果是一些服务器脚本及一些辅助的接口,对速度要求不高、对各个平台的==兼容性有要求==的话则一般都用==解释型语言==。

shell介绍

image.png

image.png

总结:

  • ==shell就是人机交互的一个桥梁==

  • shell的种类

# cat /etc/shells 
/bin/sh   是bash shell的一个快捷方式
/bin/bash  bash shell是大多数Linux默认的shell,包含的功能几乎可以涵盖shell所有的功能
/sbin/nologin 表示非交互,不能登录操作系统
/bin/dash  小巧,高效,功能相比少一些
  • ==/bin/bash或/bin/sh就是最常用的shell程序的解释器==


什么是shell脚本?

解释型语言的编程一般叫script编程,也就是脚本的意思。shell script就是shell脚本。

==若干命令 + 基本格式 + 特定语法 + 思想= shell脚本==

什么时候用到脚本?

重复化、复杂化的工作,通过把工作的命令写成脚本,以后仅仅需要执行脚本就能完成这些工作。

①自动化分析处理

②自动化备份

③自动化批量部署安装

④等等...

如何学习shell脚本?

  1. 尽可能熟悉更多的命令

  2. 掌握脚本的标准的格式(声明类型、使用标准的执行方式运行脚本)

  3. 熟悉掌握脚本的基本语法

  4. 多看(看懂)——>多模仿(多练)——>多思考

shell脚本

第一个shell脚本

[root@server ~]# mkdir /shell/shell01 -p
[root@server ~]# vim /shell/shell01/1.sh

#!/bin/bash
解释型语言声明类型,表示/bin/bash为解释器(用/bin/sh也可以)

echo "hello world"

脚本执行方法:

方法1: (脚本不用执行权限,声明类型没有产生作用,因为是直接指定sh来执行此脚本)

[root@server ~]# cd /shell/shell01/
[root@server shell01]# sh 1.sh
hello world

补充:sh -x 1.sh这样执行脚本有一定的排错功能,可以查看脚本执行过程

方法2:(脚本不用执行权限,声明类型没有产生作用,因为是直接指定bash来执行此脚本)

[root@server shell01]# bash 1.sh
hello world

方法3: (脚本需要执行权限,声明类型产生作用)

[root@server shell01]# ./1.sh
-bash: ./1.sh: Permission denied
[root@server shell01]# chmod a+x 1.sh
[root@server shell01]# ./1.sh
hello world


纯命令shell脚本

也就是不需要学习任何其它的编程语法(但需要对命令掌握熟练),把要多个命令按照顺序从上往下排列。执行的时候会按从上往下的顺序来执行.

示例: 打印1,2,3

#!/bin/bash

echo 1
echo 2
echo 3

示例: 删除其它的yum配置文件,配置本地yum(假设镜像挂载到/mnt目录)

#!/bin/bash

rm /etc/yum.repos.d/* -rf
cat > /etc/yum.repos.d/local.repo <<EOF
[local]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF

回顾

#注意下面这两种区别
cat > /tmp/abc <<EOF    # >符号,表示把原内容覆盖
你好
EOF

cat >> /tmp/abc <<EOF    # >>符号,表示在原内容上追加
哈哈
EOF

关键词: 编程代码   翻译(解释器/bin/bash或/bin/sh)    把多条命令按顺序写到程序里,可以帮我们一次性批量执行,提高效率。


练习: 用shell实现httpd访问日志每天轮转(/var/log/httpd/access_log)

要求:

  1. 将/var/log/httpd/access_log轮转到/backup/年/月/年-月-日期.access_log

  2. 轮转后再创建新的/var/log/httpd/access_log

  3. 每次日志轮转后,都在/var/log/message里记录一条日志已经轮转的信息(信息自定义)

  4. 将写好的脚本放到crond服务里执行

准备工作:

# yum install httpd httpd-devel elinks -y
# /etc/init.d/httpd restart
# elinks -dump 127.0.0.1

# cat /var/log/httpd/access_log
127.0.0.1 - - [12/Apr/2019:14:55:15 +0800] "GET / HTTP/1.1" 403 4961 "-" "ELinks/0.12pre5 (textmode; Linux; -)"
#!/bin/bash
mkdir /backup/$(date +%Y)/$(date +%m)/   -p

mv /var/log/httpd/access_log /backup/$(date +%Y)/$(date +%m)/$(date +%F).access_log
touch /var/log/httpd/access_log
/etc/init.d/httpd reload  &> /dev/null
logger -t "日志轮转" "$(date +%F)成功"


扫描二维码推送至手机访问

版权声明:本文由PowerShell中文社区发布,如需转载请注明出处。

本文链接:https://www.powershell.com.cn/?id=122

分享给朋友:
返回列表

没有更早的文章了...

下一篇:shell变量说明-01

“Shell脚本介绍” 的相关文章

shell变量说明-01

shell变量说明-01

变量介绍什么是变量?通俗的说, 变量就是用来临时保存数据的。(注: 学python时会将变量讲得更深入)变量定义的格式==变量名=变量值==想要得到变量的值,在变量前加$符号# a=1 # echo $a 1什么时候需要定义变量?如果某个内容需要多次使用,并且在代码...

shell函数与case语句-04

shell函数与case语句-04

#课程目标能使用RANDOM变量产生随机数理解嵌套循环掌握case语句的基本语法结构掌握函数的定义及调用掌握常用的正则表达式元字符含义随机数bash默认有一个$RANDOM的变量, 默认范围是0~32767.使用set |grep RANDOM查看上一次产生的随机数# echo ...

CentOS7 服务器上使用T4显卡部署大型AI模型的详细教程

CentOS7 服务器上使用T4显卡部署大型AI模型的详细教程

环境准备服务器配置CPU:Platinum8225c 显卡T4 GPU:T4 16GB  CPU:8核 内存32GB操作系统:Centos7.6英伟达显卡驱动Docker容器环境Docker使用的NVIDIA驱动Ollama容器镜像,Ollama支持的显卡型号:点击查看查看运行环境的资源使...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。