shell脚本基础语法记录

这篇具有很好参考价值的文章主要介绍了shell脚本基础语法记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.变量的使用

1.1 变量的定义

Shell 支持以下三种定义变量的方式

url=chadm
echo $url
name='chadm'
echo $name
author="chadm"
echo $author

# 打印变量有2种方式
echo $author
echo ${author}

# (())和let都只能使用整数
a=$((10+66)
echo $a
let b+=6
echo $b

注意,赋值号=的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样

1.2 将命令的结果赋值给变量
variable=`command`
variable=$(command)
1.3 获取输入参数

运行 Shell 脚本文件时我们可以给它传递一些参数,这些参数在脚本文件内部可以使用$n的形式来接收,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推

#定义函数
function func(){
    echo "Language: $1"
    echo "URL: $2"
}
#调用函数
func shell "https://test"

特殊参数

  • $0 当前脚本的文件名。
  • $n(n≥1) 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是$2。
  • $# 传递给脚本或函数的参数个数。 $* 传递给脚本或函数的所有参数。 $@ 传递给脚本或函数的所有参数。当被双引号""包含时,
  • $@ 与 $* 稍有不同 $? 上个命令的退出状态,或函数的返回值,
  • $$ 当前 Shell 进程 ID。对于 Shell
    脚本,就是这些脚本所在的进程 ID。

2.字符串相关

2.1 获取字符串长度

使用命令: ${#string_name}

str="hello world"
echo ${#str}  // 输出结果是11

2.2 字符串拼接
在 Shell 中你不需要使用任何运算符,将两个字符串并排放在一起就能实现拼接

name="Shell"
url="http://test"
str1=$name$url  #中间不能有空格
str2="$name $url"  #如果被双引号包围,那么中间可以有空格
str3=$name": "$url  #中间可以出现别的字符串
str4="$name: $url"  #这样写也可以
str5="${name}Script: ${url}index.html"  #这个时候需要给变量名加上大括号
echo $str1
echo $str2
echo $str3
echo $str4
echo $str5

输出结果:
Shellhttp://test
Shell http://test
Shell: http://test
Shell: http://test
ShellScript: http://testindex.html

2.3 字符串截取

从左开始截取:${string: start :length}

string 是要截取的字符串,start 是起始位置(从左边开始,从 0 开始计数),length
是要截取的长度(省略的话表示直到字符串的末尾

从右开始截取:${string: 0-start :length}

同第 1) 种格式相比,第 2) 种格式仅仅多了0-,这是固定的写法,专门用来表示从字符串右边开始计数

示例:

# 截取最后一位,都是输出o
name="hello"
echo ${name:4:1}   # 从左边开始截取

echo ${name:0-1:1}  # 从右边开始截取

总结:

  • ${string: start :length} 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。
  • ${string: start} 从 string 字符串的左边第 start 个字符开始截取,直到最后。
  • ${string: 0-start :length} 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。
  • ${string: 0-start} 从 string 字符串的右边第 start 个字符开始截取,直到最后。
  • *${string#chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
  • *${string##chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
  • *${string%chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。
  • *${string%%chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符

3.数组的使用

在 Shell 中,用括号( )来表示数组,数组元素之间用空格来分隔

arr=(12 23 "hello" )
# 获取数组第一个元素
echo ${arr[0]}

# 获取所有元素
echo ${arr[*]}
echo ${arr[@]}

# 获取数组长度
echo ${#arr[*]}
echo ${#arr[@]}

# 数组拼接
arr2=(56 "world")
arr3=(${arr[*]} ${arr2[*]})
echo ${arr3[*]}

对应的输出结果
12
12 23 hello
12 23 hello
3
3
12 23 hello 56 world

4.逻辑流程控制

4.1 if/esle语句

最后必须以fi来闭合,fi 就是 if 倒过来拼写

if  condition
then
    statement(s)
fi

或者
if  condition;  then
    statement(s)
fi

针对整数的,使用(())
双小括号 (( )) 是 Bash Shell 中专门用来进行整数运算的命令

a=1
b=2
if (( $a == $b ))
then
    echo "a和b相等"
else
    echo "a和b不相等"
fi

针对字符串
[[ ]]是 Shell 内置关键字,它和 test 命令类似,也用来检测某个条件是否成立

str1="1"
str2="2"
if [[ -z $str1 ]] || [[ -z $str2 ]]  #不需要对变量名加双引号
then
    echo "字符串不能为空"
elif [[ $str1 < $str2 ]]  #不需要也不能对 < 进行转义
then
    echo "str1 < str2"
else
    echo "str1 >= str2"
fi
4.2 循环

break 用来结束所有循环,循环语句不再有执行的机会;continue 用来结束本次循环,直接跳到下一次循环,如果循环条件成立,还会继续循环

while


while ((i <= 10))
do
    ((sum += i))
    ((i++))
done
echo "The sum is: $sum"

switch

printf "Input integer number: "
read num
case $num in
    1)
        echo "Monday"
        ;;
    2)
        echo "Tuesday"
        ;;
    3)
        echo "Wednesday"
        ;;
    4)
        echo "Thursday"
        ;;
    5)
        echo "Friday"
        ;;
    6)
        echo "Saturday"
        ;;
    7)
        echo "Sunday"
        ;;
    *)
        echo "error"
esac

for

sum=0
for ((i=1; i<=10; i++))
do
    ((sum += i))
done
echo $sum

5.运算&判断

5.1 数字
num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

参数 说明

  • -eq 等于则为真
  • -ne 不等于则为真
  • -gt 大于则为真
  • -ge 大于等于则为真
  • -lt 小于则为真
  • -le 小于等于则为真
5.2 字符串
num1="hello"
num2="world"
if test $num1 = $num2
then
    echo '两个字符串相等!'
else
    echo '两个字符串不相等!'
fi

参数说明

  • = 等于则为真
  • != 不相等则为真
  • -z 字符串 字符串的长度为零则为真
  • -n 字符串 字符串的长度不为零则为真
5.3 文件
cd /bin
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi

参数 说明

  • -e 文件名 如果文件存在则为真
  • -r 文件名 如果文件存在且可读则为真
  • -w 文件名 如果文件存在且可写则为真
  • -x 文件名 如果文件存在且可执行则为真
  • -s 文件名 如果文件存在且至少有一个字符则为真
  • -d 文件名 如果文件存在且为目录则为真
  • -f 文件名 如果文件存在且为普通文件则为真
  • -c 文件名 如果文件存在且为字符型特殊文件则为真
  • -b 文件名 如果文件存在且为块特殊文件则为真
5.4 bool运算&逻辑运算

bool运算

  • ! 非运算,表达式为 true 则返回 false,否则返回 true。
    -[ ! false ] 返回 true。
  • -o 或运算,有一个表达式为 true 则返回 true。
    [ $a -lt 20 -o $b -gt 100 ] 返回 true。
  • -a 与运算,两个表达式都为 true 才返回 true。
    [ $a -lt 20 -a $b -gt 100 ] 返回 false。

逻辑运算文章来源地址https://www.toymoban.com/news/detail-653660.html

  • && 逻辑的 AND
    [[ $a -lt 100 && $b -gt 100 ]] 返回 false
  • || 逻辑的 OR
    -[[ $a -lt 100 || $b -gt 100 ]] 返回 true

到了这里,关于shell脚本基础语法记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux shell脚本命令记录

    1、cut cut 命令可以从一个文本文件或者文本流中提取文本列。 egg:  参考:https://www.cnblogs.com/liuyansheng/p/6180332.html 2、identify identify命令主要用于获取一个或多个图像文件的格式和特性。 3、shell中#*,##*,#*,##*,%*,%%*的含义及用法    参考:shell中#*,##*,#*,##*,%*,%%*的

    2024年02月08日
    浏览(47)
  • linux shell脚本操作日期记录

    最近碰到个需求,按日导出每日的数据,然后导入另一个数据库。需要写个日期相关的脚本。这里总结下 运行情况如下: 分别设想了三种情况 1、从某日到某日 2、从当前日期往前推N天 3、从某个日期到当前日期 plus:chatgpt是个写脚本是个好帮手

    2024年02月17日
    浏览(43)
  • shell脚本学习记录1(运算符)

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为: $n 。 n  代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 以下实例我们向脚本传递三个参数,并分别输出,其中  $0  为执行的文件名(包含文件路径):  另

    2024年02月08日
    浏览(45)
  • 【Shell】基础语法(二)

    用于匹配的字符称为通配符(Wildcard),如: * ? [ ] 具体如下: * : 匹配0个或多个任意字符 ? :匹配一个任意字符 [ ] :匹配方括号中任意一个字符的一次出现 代换成功的前提是文件必须存在,如果文件不存在,则带换不了。 参数扩展: touch {1, 2, 3, 4} / touch{1..4}.txt 执行某一

    2024年02月14日
    浏览(30)
  • shell脚本基础

    目录 前言 一、概述 (一)、shell脚本基础概念 (二)、shell的类型 二、Shell变量 (一)、组成 1.变量名 2.变量值 (二)、类型 1.系统内置变量(环境变量) 2.自定义变量 3.预定义变量  4.位置变量 5.作用域       6.shell中的字符串       三、运算符 (一)、数学运算 (二

    2024年02月12日
    浏览(28)
  • 【Linux】shell 脚本基础使用

    在终端中输入命令可以完成一些常用的操作,但是我们都是一条一条输入命令,比较麻烦,为了解决这个问题,就会涉及到 shell 脚本,它可以将很多条命令放到一个文件里面,然后直接运行这个文件即可。 shell 脚本类似 Windows 的批处理文件 shell 脚本就是将连续执行的命令写

    2024年04月23日
    浏览(47)
  • Linux:shell脚本:基础使用(2)

    格式1:test  条件表达式 格式2:[  条件表达式  ]  (前后至少应有一个空格) 常用的测试操作符 -d:测试是否为目录(Directory) -e:测试目录或文件是否存在(Exist) -f:测试是否为文件(File) -r:测试当前用户是否有权限读取(Read) -w:测试当前用户是否有权限写入(Writ

    2024年02月13日
    浏览(52)
  • Android需要掌握的shell脚本基础

    linux中sh是链接到bash上的,所以sh与bash在功能上是没有区别的,相当于bash解析器是sh的增强版本,所以安卓开发者可以在 git bash中 测试脚本 输出结果如下: 输出结果如下: 输出结果如下: 输出结果如下: seq: squeue  是一个序列的缩写,主要用来输出序列化的东西 seq常见命

    2024年02月10日
    浏览(34)
  • Shell脚本基础( 四: sed编辑器)

    目录 1 简介 1.1 sed编辑器的工作流程 2 sed 2.1 基本用法  2.2 sed基本格式 2.2.1 sed支持正则表达式 2.2.2 匹配正则表达式 2.2.3 奇数偶数表示 2.2.4 -d选项删除 2.2.5 -i修改文件内容 2.2.6  -a 追加 2.3 搜索替代 2.4 变量 sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供

    2024年02月12日
    浏览(39)
  • Linux实验4 shell脚本编程基础

    1.假设在/tmp下有以当前用户的帐号命名的目录,请在命令行中临时修改环境变量PATH的值,要求该目录的路径附加到该变量的最后。 2.请在命令行中临时设置命令输入提示行格式为:“当前系统时间-用户#”。 3.在命令行定义一个字符串变量str,并且赋值为“test for shell”,然

    2024年04月17日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包