文章目录

          • shell简介
          • 如何学好shell
          • 初识shell
          • 什么是shell
          • 执行shell脚本常用的三种方式
          • shell变量
          • 变量相关的配置文件
          • 变量的定义
          • shell核心位置变量

shell简介
为什么学习shell,shell的作用
面试题:给你一台主机你的操作流程是什么?
1.自动化安装操作系统kickstart cobbler
2.优化操作系统系统层面 关闭selinux 关闭不用的服务 优化ssh 禁止ROOT登录 加大文件描述符 定时任务 修改默认仓库 内核参数优化安全层面 禁用ROOT jumpserver iptables 优化  禁止显示操作系统版本号
3.安装服务NGINX NFS rsync Tomcat httpd zabbix iptables jumpserver
4.部署代码 代码更新
5.服务监控 zabbix 自定义监控
6.日志分析 IP访问量 日志切割
7.其他 定时任务+shell脚本
统计nginx日志中客户端访问的top10
shell串联
如何学好shell
1.shell 执行方式
2.shell变量
3.shell表达式
4.if判断
5.for循环
6.while循环
7.函数
8.流程控制语句
9.expect
10.数组···01.掌握变量和表达式
02.读写理解老师的脚本
03.自己尝试书写脚本(先照着写-熟练-不看笔记自己写-修改 打补丁多练习)
04.形成自己的风格
05.切忌拿来即用
06.最好有一本内容比较全面的书籍《跟老男孩学习shell》案例较多。
初识shell
1.脚本的结尾使用.sh
2.脚本开头使用#!/bin/bash
3.脚本中尽量有作者信息
4.脚本中尽量有注释信息
5.脚本中尽量使用英文注释
6.成对的符号一次书写完
注意shell中的符号都是英文字符
什么是shell
shell 是命令解释器,负责解释用户输入命令传递给内核,内核执行调用硬件,然后将结果返回给shell
交互式:和人交互
非交互式:不和人交互 类似定时任务

什么是shell脚本

将命令写入到文件中,称为shell脚本,增加了判断 循环 函数等语法

创建shell脚本

Linux系统默认的shell为:bash[root@web01 day01]# echo $SHELL
/bin/bashbash和sh的区别:没区别[root@web01 day01]# cat test.sh 		#脚本名称:见名知其义
#!/bin/bash								#指定解析器
echo "hello world"						#输出内容到屏幕
执行shell脚本常用的三种方式
第一种方式:
sh test.sh第二种方式:路径的执行方式:脚本需要有x权限绝对路径:[root@web01 day01]# chmod +x test.sh[root@web01 day01]# /scripts/shell/day01/test.sh hello world相对路径:[root@web01 day01]# ./test.sh hello world第三种执行脚本方式:[root@web01 day01]# . test.sh 
hello world
[root@web01 day01]# source test.sh 
hello world三种脚本执行方式的区别:
第一、二种方式是在子shell中执行
第三种方式是在父shell中执行解释器分为父shell 和子shell
父shell:登录系统默认为父shell
子shell:在默认的父shell中执行bash 进入到了一个子shell中在执行脚本的时候,调用子shell执行内容
shell变量
1.什么是变量
用一个固定的值表示一堆不固定的值,称为变量
比如:dir=/etc/sysconfig/network-scriptes
x=1 y=x+22.变量的分类
环境变量(全局变量)系统默认存在。对所有父shell和子shell生效
普通变量(局部变量)自定义变量。只对当前的shell生效3.按照变量的生存周期
临时变量:直接定义或者使用export定义的变量
永久变量:写入到文件中或者/etc/profile便令文件中直接定义: name=oldboy			#只对当前的shell生效
使用export:export name=oldboy		#对当前父shell下的所有的shell生效
变量相关的配置文件
/etc/profile		#常用的变量配置文件。每次开机和每次的远程连接都会执行此文件
/root/.bash_profile
/root/.bashrc
/etc/bashrc
变量的定义
名称的定义:name=oldboy
名称的定义规范:由字母、数字、下划线组成。不能由数字开头。可以用字母和下划线开头。等号(=)两边不能有空格。
名称:全大写  全小写  驼峰命名法
name_age
NAME_AGE	#系统默认的变量全是大写 env
Name_Age	#大驼峰
name_Age	#小驼峰变量值的定义:
1.字符串定义:不连续的使用""引起来
[root@web01 ~]# dir=/etc/sysconfig/network-scripts/
[root@web01 ~]# echo $dir 
/etc/sysconfig/network-scripts/[root@web01 ~]# test="1 2 3 4"
[root@web01 ~]# echo $test 
案例:
定义路径:dir=/etc/sysconfig/network-scripts/
code=/var/nginx/html定义文件:
file1=/etc/passwd file2=/etc/hosts定义命令:
[root@web01 ~]# hehe='touch /tmp/hehe.txt'
[root@web01 ~]# $hehe[root@web01 ~]# vim_eth0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
[root@web01 ~]# $vim_eth0
====================================================================2.数字定义:
age=18
age="1 124 34"3.命令定义:``或者$().先执行``中的命令,然后将执行的结果赋值给变量
[root@web01 ~]# count=`cat /etc/passwd |wc -l`
[root@web01 ~]# echo $count
28
[root@web01 ~]# count=$(cat /etc/passwd |wc -l)
[root@web01 ~]# echo $count
28案例:定义一个变量,在脚本的任意位置执行nginx -t命令
[root@web01 ~]# nginx_n='nginx -t'
[root@web01 ~]# $nginx_n
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful案例:时间
脚本中执行变量每次时间为当前的执行时间[root@web01 ~]# Time='date +%F-%H-%M-%S'[root@web01 ~]# $Time 
2024-06-02-21-49-23脚本中执行的时间变量为固定的时间
[root@web01 ~]# Time=`date +%F-%H-%M-%S`
[root@web01 ~]# echo $Time 
2024-06-02-21-48-02[root@web01 ~]# Ip=`hostname -I |awk '{print $1}'`
[root@web01 ~]# echo $Ip
10.0.0.7
[root@web01 ~]# Host=`hostname`
[root@web01 ~]# echo $Host 
web01
[root@web01 ~]# echo "${Ip}_$Host"
10.0.0.7_web01
shell核心位置变量
$0  #获取shell脚本的文件名称
$n  #$1表示脚本的第一个参数 $2表示脚本的第二个参数[root@web01 day01]# sh test.sh {a..z}
a b c d e f g h i j k
[root@web01 day01]# cat test.sh 
#!/bin/bash
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11}basename /scripts/shell/day01/test.sh  #取最后一个参数$#	#获取脚本传参的个数
案例:
[root@web01 day01]# cat test.sh 
#!/bin/bash
[ $# -ne 2 ]&& echo "请输入两个参数"&& exit
echo "name: $1"
echo "age: $2"$*	#获取脚本传参的所有参数,默认和$@相同。在循环体中加双引号表示一个整体
$@	#获取脚本传参的所有参数,默认和$*相同。在循环体中加双引号表示独立的参数[root@web01 day01]# set -- "I am" oldboy I am 18
[root@web01 day01]# for i in $*; do echo $i; done
I
am
oldboy
I
am
18
[root@web01 day01]# 
[root@web01 day01]# for i in $@; do echo $i; done
I
am
oldboy
I
am
18
[root@web01 day01]# 
[root@web01 day01]# for i in "$*"; do echo $i; done
I am oldboy I am 18
[root@web01 day01]# 
[root@web01 day01]# for i in "$@"; do echo $i; done
I am
oldboy
I
am
18shell 状态变量:
$? 获取上一条命令的执行结果,0为成功 非0为失败
[root@web01 day01]# cat test.sh 
#!/bin/bash
ping -c1 -w1 $1 &>/dev/null
[ $? -eq 0 ]&& echo "$1 通" || echo "$1 不通"$$ #获取脚本PID号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/920692.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920692.shtml
英文地址,请注明出处:http://en.pswp.cn/news/920692.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微电网调度(风、光、储能、电网交互)(MatlabPython代码实现)

赠读者:正在埋头科研的你,或许有时你会困惑于 “投入” 与 “回报” 的时差,会疲惫于 “未知” 与 “确定” 的博弈,但请记得:那些看似 “无用” 的试错,都是在为突破搭建阶梯;那些独自深耕的日…

CentOS 7 环境下安装 JDK 1.8 及解决 wget 命令缺失问题

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] 📱个人微信&a…

psql介绍(PostgreSQL命令行工具)(pgAdmin内置、DBeaver、Azure Data Studio)数据库命令行工具

文章目录**1. psql 的核心功能**- **交互式操作**:通过命令行直接与 PostgreSQL 服务器交互,执行 SQL 查询和管理命令。- **元命令支持**:提供以 \ 开头的特殊命令(如 \l、\d、\connect),用于管理数据库对象…

设计模式9-责任链模式

定义 Chain of Responsibility Pattern:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链, 并沿着这条链传递该请求,直到有对象处理它为止。 优势 解耦请求发送者与接收者&#…

使用JAVA制作minecraft红石和创造模式插件

这一次主要是红石和创造模式的新加入由于代码较长,所以呃这一段代码就直接劳烦各位呃插进之前的3.0版本里面!!!!!!!!!import org.lwjgl.*; import org.lwjgl.glfw.*; import org.lwjgl.opengl.*; import org.lwjgl.system.*;import java.nio.*; import java.util.*;…

Git 版本管理核心实践与问题解决手册

Git 的核心价值版本控制:完整记录所有修改历史,支持随时回退到任意历史版本团队协作:允许多开发者同时工作,有效避免代码冲突和覆盖问题高效分支:通过分支隔离功能开发与稳定主线,保持项目稳定性变更追溯&a…

hadoop安欣医院挂号看诊管理系统(代码+数据库+LW)

摘 要 随着信息技术的飞速发展,医疗服务行业正逐步向信息化、智能化转型。安欣医院挂号看诊管理系统正是基于这一背景开发的一款集挂号、看诊管理于一体的综合性系统。本系统采用Hadoop大数据处理技术,旨在提高医院挂号看诊的效率,优化医疗…

【PHP】数学/数字处理相关函数汇总,持续更新中~

目录 一、取整 二、向上取整 三、向下取整 四、四舍五入取整 五、四舍五入保留小数点 六、浮点数值 七、绝对值 八、生成随机数 九、数字格式化(以千位分割) 十、对除法结果取整 十一、返回除法的余数 十二、是否为数字或数字字符串 十三、…

防火墙技术(二):安全区域

安全区域和接口 默认情况下,报文在不同安全区域之间流动时受到控制,报文在同一个安全区域内流动时不受控制。但华为防火墙也支持对同一个安全区域内流动的报文控制,通过安全策略来实现防火墙通过接口来连接网络,将接口划分到安全区…

银河麒麟V10(Phytium,D2000/8 E8C, aarch64)开发Qt

搞了一台国产计算机,银河麒麟V10系统 首先查看系统构架 kylinkylin-pc:/data$ uname -m aarch64 是arm架构的,到 https://www.qt.io/download-qt-installer下载 qt-online-installer-linux-arm64-4.10.0.run

腾讯云 MCP 场景征集计划 | 你的方案,正在定义开发新范式

开发者的进阶正在从“写代码”走向“做场景”。MCP(模型上下文协议)让你以更低心智负担撬动云AI能力,把时间花在真正的业务价值上。腾讯云开发者MCP广场 正式启动「腾讯云 MCP 场景征集计划」,寻找最懂 MCP 的你:将真实…

21款m1 max升级到macOS 13——Ventura

macOS系统体验:之前入手的m1 max出厂版本的macOS系统是macOS Monterey,也就是macOS 12,用了一段时间后,其实也是很流畅的,无奈最近vscode上的某插件一直提醒我的macOS系统版本过低。索性升级了一下macOS系统了。macOS系…

PostgreSQL WAL机制深度解析与优化

PostgreSQL 的预写日志(Write-Ahead Logging, WAL) 是其事务持久化和数据完整性的核心机制,通过“先写日志,再写数据”的原则保障故障恢复能力。以下是深度解析:一、WAL 的核心目标 崩溃恢复(Crash Recover…

三重积分的性质

文章目录前言几何意义性质先 1 后 2 投影法先 2 后 110.13前言 规律作息。 几何意义 三重积分,只要被积分函数是正的,那么,积分的结果就是质量。可能工作还是太累了,以后有时间可以买买彩票,碰碰运气。。。。 性质…

每日Java并发面试系列(5):基础篇(线程池的核心原理是什么、线程池大小设置为多少更合适、线程池哪几种类型?ThreadLocal为什么会导致内存泄漏?)

1. 什么是线程池?它的核心原理是什么?什么是线程池? 线程池是一种基于池化思想管理和使用线程的机制。它内部维护了多个线程,等待着分配由用户提交的并发执行的任务。这避免了频繁创建和销毁线程带来的开销,从而提高了…

京东商品详情API返回值应用实践

一、API核心功能京东商品详情API(如jd.item.get或jd.union.open.goods.query)是京东开放平台提供的核心接口,用于通过商品ID(skuId)或店铺ID检索指定商品的详细信息。该接口支持获取商品基础信息、价格、库存、规格参数…

学习python第14天

汇报一下秋招进度,字节一面完后9天都没给回复,大概率被挂了,但是官网还在流程中,我又没有HR联系方式,所以直接在平台上反馈了,要么赶紧给我过,要么赶紧给我挂,耽误时间。阿里国际一面…

监听nacos配置中心数据的变化

RefreshScope实现nacos配置中心数据的动态刷新。如果需要监听nacos配置中心数据的变化&#xff0c;并执行对应的业务逻辑&#xff0c;则可以使用NacosConfigListener注解。除了需要导入微服务和nacos配置中心的jar&#xff0c;还需要额外导入如下的jar&#xff1a;<dependen…

docker搭建Apisix和Apisix Dashboard

第一步&#xff1a;github下载源码 参考&#xff1a;https://apisix.apache.org/zh/docs/apisix/installation-guide/ git clone https://github.com/apache/apisix-docker.git cd apisix-docker/example第二步&#xff1a;添加Apisix Dashboard镜像 打开./apisix-docker/examp…

ubuntu 安装conda, ubuntu24安装miniConda

1. 官网下载脚本&#xff1a; Download Success | Anaconda 我选的mini版本&#xff0c;也可以选左边的完整版 2. 下载后&#xff0c;上传至服务器/opt下 3. 执行脚本安装&#xff1a; sh Miniconda3-latest-Linux-x86_64.sh 4. 需要按照英文提示&#xff0c;输入回车&#…