01.初识Shell

本文介绍了Shell的基础知识,包括Shell的定义、脚本创建、变量定义(普通变量、命令变量)、变量方法、局部和全局变量、内置变量以及如何执行脚本。此外,还讲解了字符串截取、默认值设定、流程控制语句和函数定义及其用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Shell

什么是shell?

  • shell是位于操作系统和应用程序之间,是他们二者最主要的接口,shell负责把应用程序的输入命令信息解释给操作系统,将操作系统指令处理后的结果解释给应用程序。
  • 我们常说的shell是命令行式的shell,在工作中常用的是linux系统下的bash。
  • shell 是 命令解释器

创建shell脚本

脚本创建工具

vi/vim

脚本命名

见名知意: 以.sh结尾

脚本命名

  • 首行指定解析器 :#!/bin/bash
  • 命令罗列和语法套用

注释内容

  • 单行注释:  除了首行的#不是注释外,其他所有行内容,只要首个字符是#,那么就表示该行是注释
  • 多行注释: :<<! … ! 和 :<<字符 … 字符

脚本执行

脚本执行完成之后,必须添加执行权限

chmod u+x xxx.sh (添加执行权限)

  • bash xxx.sh 或 /bin/bash xxx.sh (推荐使用)
  • xxx.sh 或 ./xxx.sh
  • source xxx.sh 或 . xxx.sh (.号后面有空格)
  • sh xxx.sh

总结:source或者.点号执行方式不会开启子进程,能共享当前终端定义的变量,其他执行方式会开启子进程
每打开一个终端是一个shell环境,使用非source执行方式时,会开启子进程,也是一个shell环境,称为子shell环境。

变量定义

1.普通变量

普通变量的定义有如下三种方式:

  • 方式一 : 变量名=变量值 (=前后不能有空格 )
  • 方式二: 变量名=‘变量值’ 不解析变量值的内容
  • 方式三: 变量名=“变量值” 解析变量值中的内容

**习惯:**数字不加引号,其他默认加双引号

2.命令变量

命令变量有两种定义方式:

  • 方式一: 变量名 = 命令 注意:`是反引号
  • 方式二: 变量名=$(命令)

执行流程:

1、执行`或者$()范围内的命令

2、将命令执行后的结果,赋值给新的变量名A

变量方法

查看变量:

  • 方式一: $变量名
  • 方式二: “$变量名”
  • 方式三: ${变量名}
  • 方法四: 标准使用方式“${变量名}”

取消变量: unset 变量名

本地变量

普通变量只能在当前进程中使用 ,不能在子进程中使用,当前进程消失普通变量也就消失

如: temp=666 , name=“zhangsan” 变量前没有加其他修饰,就是本地变量

全局变量

全局变量是:在当前系统的所有环境下都能生效的变量

能够在当前进程和子进程中使用,如果另起一个终端则失效,可以在外面定义,在里面shell脚本中使用

定义方式: export 变量名=值

查看所有全局变量: env

shell内置变量

符号意义
$0获取当前执行的shell脚本文件名
$$获取执行shell脚本的进程号
$n获取当前执行的shell脚本的第n个参数值,n=1…9,当n为0时表示脚本的文件名,如果n大于9就要用大括号括起来${10}
$#获取当前shell命令行中参数的总个数
$?获取执行上一个指令的返回值(0为成功,非0为失败)

案例

定义一个shell脚本: demo.sh

#!/bin/bash
echo 'lg'
echo $user
echo "脚本名称是: $0"
echo "脚本执行的进程号是: $$"
echo "传入的脚本参数个数是: $#"
echo "第一个参数是: $1"
echo "第二个参数是: $2"
echo "上一条指令是否返回成功(0为成功,非0失败): $?"

在命令行中:

export user=helloworld
bash demo.sh 20 21

执行结果:

lg
helloworld
脚本名称是: demo.sh
脚本执行的进程号是: 5548
传入的脚本参数个数是: 2
第一个参数是: 20
第二个参数是: 21
上一条指令是否返回成功(0为成功,0失败): 0

字符串的精确截取

格式: ${变量名:起始位置:截取长度} 位置从0开始

${file:0:5}       从第1个字符开始,截取5个字符
${file:5:5}       从第6个字符开始,截取5个字符
${file:0-6:3}     从倒数第6个字符开始,截取之后的3个字符

默认值相关

场景一:

变量a如果有内容,那么就输出a的变量值

变量a如果没有内容,那么就输出默认的内容

格式: ${变量名:-默认值}

 #!/bin/bash
 # 如果输入参数为空,默认选择套餐1,否则套餐n
 a="$1"
 echo "您选择的套餐是: 套餐 ${a:-1}"

场景二:

如果变量没有定义,将默认值赋值给变量

格式: ${变量名:=默认值}

 #!/bin/bash
 a="$1"
 echo "国家法定结婚年龄(男性)是 ${a:=22} 岁"
 echo "国家法定结婚年龄(男性)是 ${a} 岁"

场景三:

当变量存在的时候输出提示信息

格式:

${变量名:+提示信息}

 #!/bin/bash
 a="$1"
 echo "${a:+已经获取到第一位的参数}"

流程控制语句

在这里插入图片描述

函数

1.简单函数定义

#!/bin/bash
f1(){
  echo "helloworld"
}
f1

2. 函数传参1

#!/bin/bash
f2(){
  echo "hello $1"
}
f1 lg

3.函数传参2

#!/bin/bash
f3(){  
	echo "hello $1"
}
f1 ${2}

在命令行中

bash demo.sh hello world

执行结果:

hello world

4.函数传参3

#!/bin/bash
temp = "$1"
f3(){  
	echo "hello $1"
}
f1 "${temp}"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值