shell script:构建脚本基础

创建脚本

创建shell脚本时必须在第一行指定要使用的shell,格式为#! /bin/bash#主要作为注释使用,不会处理shell脚本中的注释行,但shell脚本中的第一行是个例外,#后面的 ! 会告诉shell用哪个shell来运行脚本

用户变量

  • 定义:数字,字母,下划线组成,长度不超过20个,区分大小写
  • 引用变量使用 $,没有 $, shell会将变量名解释成普通的文本字符串
  • 使用等号将值赋给用户变量,变量和等号之间不能出现空格

命令替换

有两种方式可用将命令输出赋给变量:

  • 反引号`
  • $()格式
    用途:可通过命令替换获取当前日期并用它来生成唯一文件名

数学运算

  • expr 1 + 2 (符号两边的空格时必须的)
  • bash shell提供了一种更加简单的方法来执行数学表达式:var=$[1 + 5]。用方括号执行shell数学运算比用expr命令方便。在使用方括号来计算时,不用担心shell会误解乘号或其他符号,shell知道它不是通配符,因为在方括号内
  • 浮点解决方案:bc

[ ][[ ]]

  1. 单个方括号是一个内建命令,双方括号是一个关键字。
  2. 双方括号提供了更强大的字符串和模式匹配功能。例如,你可以使用"=="运算符来进行模式匹配。
  3. 在双方括号中,可以使用逻辑运算符(&&和||)。在单个方括号中,你必须使用-a(表示并)和-o(表示或)。
  4. 双方括号中的变量引用可以不被引号括起来,即使变量的值包含空格或特殊字符也不会出错。但在单个方括号中,如果你不使用引号,可能会导致错误。
  5. 在双方括号中,"<“”>"是字符串比较运算符。在单个方括号中,它们是重定向运算符,你必须使用"lt""gt"来进行比较。
  6. 双方括号支持正则表达式匹配。

比较

  • 数值比较,可以用在数字和变量上
    在这里插入图片描述
  • 字符串比较
    在这里插入图片描述
    字符串大小: -n和-z可以检查一个变量是否含有数据(长度是否为0)
  • 文件比较
    在这里插入图片描述

双括号

双括号 ((expression )), expression可以是任意的数学赋值或比较表达式,用于整数运算,比如加减乘除、取余等操作。双括号内的表达式都被认为是数学表达式。使用双括号 (( expression ))
在这里插入图片描述

退出脚本

  • 退出状态码是0到255之间的整数
  • 查看退出状态码:$?用来保存上个已经执行命令的退出状态码,对于需要检查的命令,必须在其运行完毕后立刻查看或使用$?变量。
  • 一个成功结束的命令的退出状态码是0,如果一个命令结束时有错误,退出状态码就是一个正数值。无效命令会返回一个退出状态码127在这里插入图片描述
  • exit命令:默认情况下,shell脚本会以脚本中最后一个命令的退出状态码退出。你可以改变这种行为,返回自己的退出状态码。exit允许你在脚本结束时指定一个退出状态码。可以在exit命令的参数中使用变量

命令汇总

  • 输入输出重定向:<, <<, >, >>
  • 管道(|):将一个命令的输出作为另一个命令的输入
  • 使用多个命令时可以用 ; 分隔
  • 加载其他脚本使用命令:source,类似于py中的import,如 source common.sh
  • 显示消息:通过echo命令
    • 默认情况下,不需要使用引号将要显示的文本字符串划定出来;
    • 可用单引号或双引号来划定文本字符串,如果在字符串中用到了它们,需要在文本中使用其中一种引号,而用另外一个来将字符串划定起来
    • 输出信息为两行,如果想输出到同一行,可使用echo的-n参数+字符串两侧使用引号+要显示的字符串尾部要有一个空格:
# 输出为一行
 echo The time and date are:
 date

# 输出为多行
echo -n "The time and date are "
date
  • 转义:使用反斜线\
echo "The cost of the item is $15"

输出为:The cost of the item is 5,因为在引号中出现$,就会以为在引用一个变量,脚本会尝试显示$1,再显示数字,要显示美元符需要使用反斜线转义:echo “The cost of the item is \$15

  • test 命令是一个内建命令,用于检查某个条件是否成立,然后根据检查结果返回一个退出状态码。test 命令的另一个等效形式是方括号 [ ]

脚本验证

  1. 使用shell的"-n"或"–noexec"选项来检查脚本的语法,但不实际执行它。检查"myscript.sh"脚本的语法,但不会执行脚本中的任何命令。如果脚本中有语法错误,bash会打印错误消息。
bash -n myscript.sh
  1. 使用shell的"-v"或"–verbose"选项来打印脚本中的每个命令,但不执行它们。这将打印脚本中的每个命令,让你看到脚本将要做什么,但不会实际执行这些命令。
bash -v myscript.sh
  1. 使用shell的"-x"或"–xtrace"选项来打印脚本中的每个命令,以及它们的输出结果。这将打印脚本中的每个命令,以及它们的输出结果,让你看到脚本是如何工作的。
bash -x myscript.sh

这些选项都是在命令行中使用的,而不是在脚本中。如果你想在脚本中使用这些选项,你需要在脚本的开头添加相应的"set"命令。例如,"set -n"会让脚本在检查语法后停止运行,"set -v"会让脚本打印每个命令,"set -x"会让脚本打印每个命令和它们的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值