Shell脚本day2~简单的介绍

简介: Shell脚本day2~简单的介绍

一、Shell脚本简单的介绍(Shell脚本有多个类,默认的是bash,因为它免费,开源)



  • 1.1、建立脚本 hello.sh


touch hello.sh
定义文件声明
#!/bin/bash
echo "Hello world!"
  • 1.2、查看脚本权限


ls -l hello.sh


  • 查看的结果如下

image.png


提示:d:代表的是文件夹  -:代表的是文件

  • 1.3、修改文件的权限(.:任何用户都有执行的权限)


chmod +x ./hello.sh
  • 1.4、执行脚本语言(cd进入文件的所在目录,再 ./脚本文件)


./hello.sh


二、Shell脚本语法



  • 2.1、注释(# 表示注释),如下代码


#!/bin/bash
#1、第一个Shell程序?
#第一个Hello程序
echo "Hello world!"


提示:Shell脚本没有多行注释,只有单行注释


  • 2.2、Shell脚本语言变量
  • <1>、变量的定义注意事项
    注意一:定义变量的时候,变量名不需要加"$"符号,如下:


$name="王聪"  ❎
  • 注意二:变量名和等号之间不能有空格(这个大家可以知道和我们平时的语言不一样),如下:


name ="IronMan" ❎
  • 注意三:变量名首字母必须是:字母(a-z,A-Z)、下划线也可以、双下划线也可以,如下:


name1="王聪"   ✅
_name2="王聪"  ✅
__name3="王聪" ✅
  • 注意四:变量名之间可以有下划线,但是不能有空格,如下:


na me4="王聪"  ❎
  • 注意五:变量里面不允许使用标点符号,如下:


na,me5="王聪"  ❎
  • <2>、只读变量,关键字:readonly,如下例子


name="王三"
readonly name
name="李四"

执行脚本报错:./hello.sh: line 12: name: readonly variable

  • <3>、删除变量,如下


name="小王"
# 打印变量
echo $name
# 删除变量
unset name
# 再次打印变量
echo $name
echo "打印了"


提示: unset name 删除变量 name


image.png


  • <4>、变量的类型


  • 类型一:本地变量,作用域:整个bash进程可以用,语法:name="Dream"
  • 类型二:局部变量,作用域:当前代码段(修饰符:local),语法:local name="小王"
  • 类型三:环境变量,作用域:当前shell进程以及子进程,语法:export name="小梨"
  • 类型四:位置变量


#!/bin/bash
#给我们的脚本文件传递参数
#文件名称
fileName=${0}
#参数一
name=${1}
#参数二
height=${2}
#参数三
age=${3}
echo "姓名:${name} 身高:${height} 年龄:${age}"


  • 类型五:特殊变量
  • ${0}:特殊变量:脚本的文件名
  • ${?}:表示返回上一个命令执行状态返回值
  • 0:表示执行成功
  • 1:程序执行结果
  • 2:表示程序状态返回码(0-255)
  • $#:表示参数的个数
  • $*:表示参数的列表
  • $@:也表示参数的列表
  • $$:表示当前 shell 的进程 ID
  • $!:表示执行上一个命令的 PID


$*$@ 的区别

$*: 参数列表:将所有的参数列表组成一个字符串

$@ :参数列表:将所有的参数列表分开展示出来


  • 2.3、Shell脚本语言:字符串


  • <1>、单引号:打印结果 baby1


#!/bin/bash
name1='baby1'
echo ${name1}
  • <2>、双引号:打印结果 baby2


#!/bin/bash
name2='baby2'
echo ${name2}
  • <3>、字符串拼接
  • 拼接方式一:


#!/bin/bash
name='baby'
age=100
sex="男"
info="${name}${age}${sex}"
echo ${info}
  • 拼接方式二:


#!/bin/bash
name='baby'
age=100
sex="男"
info="姓名:"${name}"年龄="${age}"性别="${sex}""
echo ${info}
  • <4>、获取字符串的长度:下面脚本的执行结果:4


#!/bin/bash
name='baby'
echo ${#name}
  • <5>、字符串的截取:语法: ${变量名:开始位置:截取长度}
  • 案例一:结果是:have


#!/bin/bash
name='I have a dream'
echo ${name:2:4}
  • 案例二:从第3个位置截取到最后,结果是:have a dream
    方式一:


#!/bin/bash
name='I have a dream'
length="${#name}"
echo ${name:2:length-1}
  • 方式二:
#!/bin/bash
name='I have a dream'
echo ${name:2}
  • 案例三:0-6的截取,结果是:I have


#!/bin/bash
name='I have a dream'
echo ${name:0:6}
  • <6>、字符串的删除
  • 语法一:$(变量名#删除字符串 正则表达式)作用:从字符串开头(左边)开始匹配要删除字符串
  • 案例一:结果是:I have a dream,原因匹配不上,从左到右匹配的


#!/bin/bash
name="I have a dream"
result=${name#dream}
echo ${result}
  • 案例二:结果是: have a dream


#!/bin/bash
name="I have a dream"
result=${name#I}
echo ${result}
  • 案例三:查找指定字符第一个,并且删除前面所有的字符(包含自己)


#!/bin/bash
name="I have a dream"
result=${name#*d}
echo ${result}
  • 案例四:删除指定范围(闭区间,包含首尾),结果是:ream


#!/bin/bash
name="I have a dream"
result=${name#I*d}
echo ${result}
  • 语法二:$(变量名##删除字符串 正则表达式)作用:从字符串结尾(右边)开始匹配要删除字符串
  • 案例一:结果是:m


#!/bin/bash
name="I have a dream"
result=${name##*a}
echo ${result}


总结:语法一语法二 都是从左边往右边删除的,仅仅是查找的方向不一样而已


  • 语法三:$(变量名%删除字符串 正则表达式),从字符串结尾开始匹配,删除匹配的字符串
  • 案例一:查找第一个字符,结果查找不到,因为是从右往左开始查找的


#!/bin/bash
name="I have a dream"
result=${name%a}
echo ${result}
  • 案例二:查找第一个字符,结果查找到,因为是从右往左开始查找的


#!/bin/bash
name="I have a dream"
result=${name%m}
echo ${result}
  • 案例三:查找指定字符第一个,并且删除所有字符,打印结果是:I


#!/bin/bash
name="I have a dream"
result=${name%h*}
echo ${result}
  • 案例四:指定删除范围,打印结果是:I have a dre


#!/bin/bash
name="I have a dream"
result=${name%a*m}
echo ${result}
  • 语法四:${变量名%%删除字符串 正则表达式}
  • 案例一:查找指定字符串最后一个,并且删除前面所有的字符串(包含自己)


#!/bin/bash
name="I have a dream"
result=${name%a*}
echo ${result}


提示:% 决定方向的问题

1个 %:查询方向从右到左 结果是:I have a dre

2个 %:查询方向从左到右 结果是:I h

目录
相关文章
|
14天前
|
Shell Linux
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
77 32
|
4月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
154 1
|
3月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
113 2
6种方法打造出色的Shell脚本
|
3月前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
145 1
|
3月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
142 2
|
4月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
103 6
|
3月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
4月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
109 12
|
4月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
143 2
|
5月前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别