Linux新手生存笔记[10]——shell脚本基础3-函数及常用命令

2023-05-16

回到全局目录

-----------------------------------------------

目录

函数定义 1
退出状态 1
参数传递 2
标准IO 2
脚本调试 2
AND&OR 3
内置命令补充 3


函数定义

函数定义:

Shell 中,函数就是一组命令集或语句形成一个可用块

函数增强了shell的可编程能力

组成

function_name(){

   statements

}

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 

函数名(在一个脚本中必须唯一)

函数体(命令集合)

注意

shell中不存在向前声明(先定义后使用)

必须在调用一个函数之前对它进行定义

函数可以定义自己内部使用的变量:local

像使用命令一样调用函数

eg

function copyfile()

         {

             local srcfile=$1

             local dstfile=$2

             cp $srcfile $dstfile

             return 0   # always return success

         }

copyfile /tmp/myconf /etc/sysconf

调用

function_name params

 

可以通过return命令让函数返回数字值,或者echo一个字符串返回

 

参数传递

参数传递:

参数使用与位置参数一样

$1, $2, ……

$@, $*

$#

func $var1 $var2

注:变量中间用空格、Tab分割

返回值

return:主要用来返回退出状态,$?

0 <= 返回值(整数) <= 255

0 为无错误;

0 为有错误;

注:如果返回其他数据,可以使用echo或者全局变量

return_var=`func $var1 $var2`

 

 

退出状态

退出状态(exit status)

函数返回一个被称为退出状态的值. 退出状态可以由return 来指定statement, 否则函数的退出状态是函数最后一个执行命令的退出状态(0 表示成功,0 表示出错代码).

可以在脚本中由$? 引用

 

退出值为 0 表示成功

退出值非 0 表示失败

当一个命令因为严重的信号 N 退出时,bash 将使用 128+N 作为它的退出状态

出现一个信号

128及以上

严重的信号 N 退出

命令没找到:

127

文件找到但不可执行:

126

展开或重定向中的错误:脚本程序可使用的错误代码

1-125

所有的内建命令在用法错误时返回

2

成功

0

 

内置命令补充

内置命令补充:

:命令

冒号(:)是一个空命令,偶尔用于简化条件逻辑,相当于true的一个别名。

例如 while :

也用于在变量的条件设置中

例如 : ${var:=value}

if ….;then

  :

fi

.命令

用于在当前shell中执行命令

. ./shell_script 

相当于source命令

在执行脚本程序中列出的命令时,使用的是调用该脚本程序的同一个shell

 

续行符\[enter]

必须是行的最后一个字符  用于统一命令跨多行

 

echo命令

输出结尾带有换行符的字符串

echo –n “string to output”              bash风格去换行符

eval命令

允许对参数进行求值,是shell的内置命令

即允许代码被随时生成和运行

exec命令

两种用法 

典型:将当前shell替换为一个不同的程序

exec wall “Thanks for all the fish”

 

第二种用法修改当前文件描述符

exec 3 < afile

exit n命令

使脚本程序以退出码n结束运行

若是在脚本退出时不指定退出状态,那么该脚本最后一条被执行命令状态将被用作返回值

export命令

功能说明:设置或显示环境变量。

语  法:export [-fnp][变量名称]=[变量设置值]

参  数:

 -f  代表[变量名称]中为函数名称。

 -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。

 -p  列出所有的shell赋予程序的环境变量

 

注意:

1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;

2、一个shell中的系统环境变量才会被复制到子shell中(用export定义的变量);

3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失(并不能返回到父shell中)。

4、不用export定义的变量只对该shell有效,对子shell也是无效的。

 

补充说明:

1.shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。

2.

export把自己的参数创建为一个环境变量,而这个环境变量可以被当前程序调用的其他脚本和程序看见

被导出变量构成从该shell衍生的任何子进程的环境变量

 

expr命令

格式;  expr  argu  operator  argu    [必带空格]

将它的参数当做一个表达式来求值,最常见用法简单数学运算

x=`expr $x + 1`  注意,运算符两边空格必须

x=$(expr $x + 1)

 

例子:

1.       直接计算

$expr 10  +  10

$expr 30  /  3

$expr 30  \*  3    【必须转义】

2.       增量计算

$LOOP=10

$LOOP=`expr $LOOP + 1`     //反引号

3.       数值测试

可用expr测试是否为数字

$VALUE=12

$expr $VALUE + 10 > /dev/null 2>&1

$echo $?

0

4.        expr本身的退出状态

注:返回值与系统退出命令恰好相反

$VALUE=”hello”

$expr $VALUE = “hello”

1

$echo $?

0

5.       模式匹配及抽取

$VALUE=”hello”

$expr $VALUE : ‘.*’

5

抽取

$VALUE=”account.doc”

$expr $VALUE : ‘\(.*\).doc’

account

let命令

系统默认“+”是作为字符串处理的,因此它不会被作为一个操作符,而只是被识别为一个普通的字符串

 

使用let强制为数字

      $ d=111

      $ echo $d+1

      111+1

      $ let d=$d+1; echo $d

      112

 

printf命令

格式化输出

d 十进制

C 一个字符

S 一个字符串

% 一个%字符

 

printf “%s\n” hello

printf “%s %d” “Hi” 6

 

return命令

使函数返回,可有一个数值参数,作为该函数的返回值,如果不带参数,return命令默认返回最后一条命令的退出码

set命令

shell设置参数变量

set $(date)

echo The month is $2

 

即参数的值作为当前脚本参数列表了

shift命令

把所有参数变量左移一个位置,是$2->$1   $3->$2原来$1被丢弃,$0保持不变

可带参数表示左移一个数值参数

 

trap命令

用于指定接收到信号后要采取的行动

常见用途:在脚本程序被中断时完成清理工作

trap command signal

注:脚本程序通常是从上到下顺序解释执行的,必须在想保护那部分代码之前指定trap命令

HUP(1) 挂起,中断掉线或用户退出 引发

INT(2)中断 ctrl+c组合键发生

QUIT(3)退出,ctrl+\组合键发生

ABRT(6)中止,默写严重的执行错误引发

ALRM(14)报警,用来处理超时

TERM(15)终止,系统关机时发出

 

unset命令

从环境变量中删除变量或函数

不能删除shell本身定义的只读变量

转载于:https://www.cnblogs.com/iplus/archive/2012/05/05/4464647.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux新手生存笔记[10]——shell脚本基础3-函数及常用命令 的相关文章

  • Hello, Weka

    转自http dreamhead blogbus com logs 16813833 html Weka xff0c 是一个用Java编写的数据挖掘软件 数据挖掘 xff0c 从字面上来看 xff0c 它是一个从数据中找寻有用信息的过程 x
  • HTML实现包含公共部分:通过ECMA6的模块化,纯前端实现类似jsp:include的功能

    以前一直是用 jsp include 的方式来引入 html 头部的公共部分 php也有类似的方式 但以上两种 xff0c 个人感觉都并不纯粹 xff0c 本着折腾的精神 xff0c 优化原有代码 xff0c 解耦合 使用 ECMA6 的模
  • 系统整体测试工具

    LoadRunner xff0c 是一种预测系统行为和性能的负载测试工具 通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题 xff0c LoadRunner 能够对整个企业架构进行测试 转载于 https www cnb
  • BZOJ1876 [SDOI2009]SuperGCD 【高精 + GCD优化】

    题目 Sheng bill有着惊人的心算能力 xff0c 甚至能用大脑计算出两个巨大的数的GCD xff08 最大公约 数 xff09 xff01 因此他经常和别人比 赛计算GCD 有一天Sheng bill很嚣张地找到了你 xff0c 并
  • mstsc VS vnc : 远程桌面最快的原因在于RDP协议

    导读 xff1a 一番讨论 xff0c 才明白为什么windows自带的远程桌面mstsc比Ultr NC要快 协议 xff0c 还是协议 从控制命令上入手 xff0c 传送GDI命令参数 xff0c 而不是屏幕的数值 绘图都由Client
  • 前端引用公共html模块方案

    最近临时一个负责公司官网的妹纸请假 xff0c 于是临时接手了下官网的项目 xff0c 官网都是静态页面 xff0c 算是很简单的 xff0c 但发现页面挺多 xff0c 而每个页面总有部分是和其他页面一模一样的 xff0c 比如页头 页尾
  • AndroidMainfest详解

    基于TV settings和SettingsProvider Android启动模式对activity行为的影响 AndroidManifest xml文件详解 Manifest文件中 application和activity标签属性详解
  • 计算机系统引导失败怎么办,电脑开机出现引导失败怎么办 是什么原因造成的...

    1 针对引导顺序被屏蔽 xff1a 开机后按DEL键进入CMOS设置 xff0c 选择主页面的第二项 Advanced BIOS Features 高级BIOS功能设定 在 高级BIOS功能 设定中选择First Boot Device 第
  • vs 开发 win32 程序,调出控制台窗口,方便调试

    设置方法 项目 gt 属性 gt 生成事件 gt 后期生成事件 gt 命令行 中添加 editbin span class hljs constant SUBSYSTEM span class hljs symbol CONSOLE spa
  • linux自动登录帐号密码,设定Linux自动登陆

    设定Linux自动登陆 在实验场景中我们可能会经常重新启动Linux xff0c 然后反复输入账户密码登陆 为了在每次启动后快速进入系统减少在实验场景中不必要的工作 xff0c 我们可以设定Linux在启动后自动登陆到指定账户 实验中一般为
  • 理解boot.img与静态分析Android/linux内核

    一些尝试和理解 1 gt 提取boot img xff1a 其中 xff0c msm代表是高通的芯片 xff0c msm sdcc 1是外接的SD卡挂载的目录 by name指的是这个sd卡分区的名称 下面几行代表每个分区存储的东西 记得提
  • c#读取json某一节点数据_C#解析json数据,如何通过下标值读取?

    关于Newtonsoft读取json数据 xff0c 在网上看到的都是使用JsonTextReader xff0c 然后 xff0c 通过while循环读取出来 如以下代码 xff1a string json 61 64 34 39 CPU
  • 如何恢复计算机工具栏,电脑任务栏怎么还原,教您怎么还原电脑任务栏

    在我们日常使用电脑中 xff0c 总会遇到一些问题 xff0c 例如windows系统中任务栏有时出现在右边 有时在上面 xff0c 这是怎么回事呢 xff1f 本来不影响操作的 xff0c 但是如果有强迫症的用户 xff0c 就一定得将其
  • cin、scanf、gets、getchar 用法介绍

    scanf是格式化输入 xff0c printf是格式化输出 cin是输入流 xff0c cout是输出流 效率稍低 xff0c 但书写简便 cout之所以效率低 xff0c 是先把要输出的东西存入缓冲区 xff0c 再输出 xff0c 导
  • BDA驱动学习笔记(1):功能拓扑图

    功能拓扑图 Functional Topology xff1a BAD的目标是不管硬件或者接收信号如何变 xff0c 它的整体架构可以不做大调整 xff0c 为此BDA引入功能拓扑图的概念 xff0c 它把类似DirectShow Filt
  • nproc systemd on CentOS 7

    Increasing nproc for processes launched by systemd on CentOS 7 Ask Question I have successfully increased the nofile and
  • MariaDB中文乱码之解决思路

    首先出现乱码的原因就是编码不一致问题引起的 xff0c 那么就从以下2个方面入手 xff1a 1 应用层 xff1a 前提条件数据库服务端存储的中文数据是对的 xff0c 但是页面上显示乱码 xff0c 这里只需要检查你的项目的编码格式 x
  • android预置权限,安卓预置应用的特权适配

    首先要理解特权应用 位于系统分区的priv app目录下的应用就是特权应用 普通三方应用只应包含normal和dangerous 运行时 级别的权限 xff0c 特权应用可能会增加signature和privileged级别的权限 如果在a
  • react里执行shouldComponentUpdate时返回false的后果

    大家都知道生命周期shouldComponentUpdate返回false时 xff0c 不会进行后续的渲染 xff0c 那这个时候state是什么情况呢 我们看一下demo class Toggle extends React Compo
  • 同比和环比的计算

    与上年度数据对比称 34 同比 34 xff0c 与上月数据对比称 34 环比 34 相关公式如下 xff1a 1 同比增长率计算公式 当年值 上年值 上年值x100 61 增长率 2 逆运算 a 已知当年值 和同比增长率这两个参数 xff

随机推荐