shell脚本语言bash基础语法学习(简介、变量、字符串)

本文介绍了bash shell脚本的基础知识,包括简介、创建及运行shell脚本、变量的定义与类型,以及字符串操作如拼接、长度获取、截取和删除。在变量部分,讲解了只读变量、删除变量以及不同类型的变量。字符串部分详细阐述了四种不同的删除字符串的正则表达式用法。

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

一 简介

android开发中进行动态库编译(.so文件)
ios开发中静态库编译(.a文件)
掌握shell可以修改和应用shell脚本,shell是用c语言开发的程序,是开发者和Linux系统的桥梁,shell有多版本脚本语言,其中bash是linux默认的语言,并且移植到多平台且相对简单易用,在开发中应用较为广泛。

二 创建及运行shell

mac系统下默认支持shell的开发环境,下面以命令行工具来演示一个hello world程序bash文件的demo

1 创建文件
cd /Users/yangyujing/Documents/bash练习 
touch hello.sh
2 查看文件属性
bogon:bash练习 yangyujing$ ls -l hello.sh
-rw-r--r--@ 1 yangyujing  staff  50  6 18 10:07 hello.sh
  • 关于bash文件的权限问题
    bash权限
    分为了4个部分(QQ群为例)
    第一部分:文件类型->QQ群类型
    第二部分:文件所有者->群主
    第三部分:所有者同组用户->管理员
    第四部分:其他用户->群成员

创建的bash文件默认都没有可执行权限,所以要加上

bogon:bash练习 yangyujing$ chmod +x ./hello.sh
bogon:bash练习 yangyujing$ ls -l hello.sh
-rwxr-xr-x@ 1 yangyujing  staff  50  6 18 10:07 hello.sh
3 用文本编辑工具编辑hello.sh文件
#定义文件声明
#!/bin/bash
echo "hello world"

#!:表示约定标记,他会告诉系统这个脚本需要什么样子的解释器来执行,既是一种脚本体现。
echo:表示命令用于输出文本信息

4 执行脚本
bogon:bash练习 yangyujing$ ./hello.sh
hello world

三 变量

1 定义变量的注意事项
  • 定义变量时候,变量名出不需要加"$"符号
  • 变量名和等号不能够有空格(和我们的一般语言不一样)
  • 变量名首字母必需是字母+下划线(a-z、A-Z)
  • 变量名中间不允许有空格
  • 不允许使用标点符号
2 只读变量readonly
name="hello 2019"  #不能有空格
readonly name
name="hello 2020"
echo ${name}
#执行结果
#./hello.sh: line 9: name: readonly variable
3 删除变量unset

脚本代码:

name="jack"
echo ${name}
unset name
echo ${name}
echo "执行完毕"

执行结果

bogon:bash练习 yangyujing$ ./hello.sh
jack

执行完毕
4 变量类型
  • 本地变量
    作用域:整个bash进程可以使用
    name="jack"
  • 局部变量(local)
    作用域:当前代码段
    local name="jack"
  • 环境变量(export)
    作用域:当前shell进程及子进程
    export name="jack"
  • 位置变量
    ${0}特殊变量,获取文件名
    位置参数从1开始获取
fileName=${0}  #特殊变量 文件名称
name=${1}      #取第一个参数
age=${2}
height=${3}
echo "name:${name} age:${age} height:${height}"

执行脚本

bogon:bash练习 yangyujing$ ./hello.sh jack 28 188
fileName:./hello.sh name:jack age:28 height:188
  • 特殊变量

1 ${?} 表示返回上一个命令执行状态返回值
0:表示执行成功
1:程序执行结果
2:表示程序状态返回码(0-255)
系统预留错误(1、2、127)

2 $# 参数个数
3 $* 参数列表
4 $@ 参数列表
5 $$ 获取当前shell进程ID
6 $! 执行上一个命令PID

  • ¥@和$的区别?
    echo ${*}
    echo ${@}
    执行脚本
    ./hello.sh jack 28 188
    脚本结果
    ${
    }->参数列表:将所有的参数组成一个字符串->“jack 28 188”
    ${@}->参数列表:分开的->“jack” “28” “188”

四 字符串

字符串可以用单引号也可以用双引号

1 字符串拼接
name="jack"
age='28'
height="188"
string1="${name}${age}${height}"
string2="name:${name} age:${age} height:${height}"
echo ${string1}
echo ${string2}

运行bash

bogon:bash练习 yangyujing$ ./hello.sh
jack28188
name:jack age:28 height:188
2 获取字符串长度
name="jack"
echo ${#name}

执行脚本

bogon:bash练习 yangyujing$ ./hello.sh
4
3 字符串截取

语法:${变量名:开始位置:截取长度}
案例一:从第几个截取几个

string="have a nice day"
echo ${string:2:2}

结果

bogon:bash练习 yangyujing$ ./hello.sh
ve

案例二:从第几个截取到结尾

string="have a nice day"
echo ${string:5}

结果

bogon:bash练习 yangyujing$ ./hello.sh
a nice day
4 字符串删除
语法一:${变量名#删除字符串 正则表达式}

作用:从字符串开头(左边)开始匹配要删除字符串
案例一:

string="have a nice day"
info=${string#nice}
echo ${info}
#执行结果have a nice day

原因:从做匹配第一个不是n,没有匹配成功,所以没有作删除操作。

案例二:匹配左侧第一个匹配成功

string="have a nice day"
info=${string#h}
echo ${info}
#执行结果ave a nice day

案例三:正则*

string="have a nice day"
info=${string#*n}
echo ${info}
#结果:ice day

删除了n以前所有的,

语法二:${变量名##删除字符串 正则表达式}

作用:从字符串结尾(右边)开始匹配要删除字符串

string="have a nice day"
info=${string##*a}
echo ${info}
#输出结果:y

总结:语法一和语法二,都是从左边删除到右边,查找方向不一样


语法三:${变量名%删除字符串 正则表达式}

作用:从字符串结尾开始匹配,从右删除匹配的字符串

案例一:从右侧开始匹配

string="have a nice day"
info=${string%h}
echo ${info}
#输出结果:have a nice day  证明从右开始第一个没有查询到

案例二:

string="have a nice day"
info=${string%y}
echo ${info}
#输出结果:have a nice da  证明从右开始第一个查询到并删除

案例三:从右匹配删除包括自身

string="have a nice day"
info=${string%a*}
echo ${info}
#输出结果:have a nice d
语法四:${变量名%%删除字符串 正则表达式}

作用:从字符串左侧开始查询匹配,从右侧删除
案例一:

string="have a nice day"
info=${string%%a*}
echo ${info}
#输出结果:h
四种语法总结:
  • 从左边删除到右边
    #->表示查询方向从左到右
    ##->表示查询方向从右到左
  • 从右边删除到左边
    %->表示查询方向从右到左
    %%->表示查询方向从左到右
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值