0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

shell脚本基础知识

CHANBAEK 来源:嵌入式攻城狮 作者:安迪西 2023-04-17 15:00 次阅读

1. shell脚本基础知识

shell脚本是一个文件,里面存放的是特定格式的指令,系统可以使用脚本解析器翻译或解析指令并执行(无需编译),shell脚本的本质是shell命令的有序集合

shell脚本编程的基本过程分为三步:

建立shell文件:包含任意多行操作系统命令或shell命令的文本文件

vi test.sh

赋予shell文件执行权限:用chmod命令修改权限

chmod 740 test.sh

执行shell文件:直接在命令行上调用shell程序

./test.sh

2. shell变量

shell允许用户建立变量存储数据,但不支持数据类型(整型、字符、浮点型), 任何赋给变量的值都被解释为一串字符。

定义shell变量名时,首个字符必须为字母,不能以数字开头,中间不能有空格,可以使用下划线,不能使用中横线及标点符号等。 shell变量分为系统变量、环境变量和用户变量三种:

用户变量:用户自定义变量,通常使用全大写定义变量名,方便识别; 在变量前加 $ 调用变量; 从右向左赋值; unset命令可删除变量的赋值

COUNT=1     #通常使用全大写定义变量名,方便识别
echo $HOME  #在变量前加 $ 调用变量
# Linux Shell/bash从右向左赋值
Y=y
X=$Y
echo $X 
y	 
#使用unset命令删除变量的赋值 
Z=hello 
echo $Z 
hello 
unset Z 
echo $Z

系统变量:用于对参数判断和命令返回值判断时使用

$0   #当前脚本的名称
$n   #传递给脚本或函数的第n个参数,n=1,2,…9
$#   #传递给脚本或函数的参数个数
$*   #传递给脚本或函数的所有参数:“$1,$2,……$9” 整体传递
$@   #传递给脚本或函数的所有参数:“$1”,“$2”,……“$9” 分开传递
$?   #命令或程序执行完后的状态,返回0表示执行成功
$$   #当前脚本程序的PID号

环境变量:在程序运行时需要设置

PATH  	    #shell搜索路径,以冒号为分割
HOME  	    #/etc/passwd文件中列出的用户主目录 
SHELL 	    #当前Shell类型
USER  	    #当前用户名
ID    	    #当前用户id信息
PWD   	    #当前所在路径
TERM  	    #当前终端类型
HOSTNAME   #当前主机名;
PS1        #定义主机命令提示符
HISTSIZE   #历史命令大小,可通过HISTTIMEFORMAT变量设置命令执行时间
RANDOM     #随机生成一个0至32767的整数
HOSTNAME   #主机名

3. shell功能语句

shell脚本程序由单条或多条shell语句构成。 shell语句包括三类:说明性语句、功能性语句和结构性语句

说明性语句:即注释行,以 # 号开始到该行结束,不被解释执行

#! /bin/sh
# 以上是告诉OS用哪种类型的shell来解释执行该程序

功能性语句:任意的shell命令、用户程序或其它shell程序。 以read命令和expr命令为例

read命令:read从标准输入读入一行, 并赋值给后面的变量。 若标准输入无数据, 则程序在此停留等侯, 直到数据到来或被终止运行

read  var		  #把读入的数据全部赋给var
read  var1  var2  var3 #把读入行中的第一个词赋给var1,第二个赋给var2,其余所有赋给var3

expr命令:用于简单的整数运算,包括加(+)、减(-)、乘(*)、整除(/)和求模(%)等操作

expr 12 + 5 \\* 3        #反斜线\\去掉*号的元字符含义
27
expr 3 - 8 / 2
-1
#####
num=9
sum=`expr $num \\* 6`    #反撇号`引用命令的运行结果
echo $sum
54

结构性语句:根据程序的运行状态、输入数据、变量的取值、控制信号以及运行时间等因素来控制程序的运行流程。 主要包括条件测试语句、多路分支语句、循环语句、循环控制语句和后台执行语句等

测试语句:test语句可测试字符串、整数和文件属性

test "$answer" = "yes"  #变量answer的值是否为字符串yes
test $num –eq 18	  #变量num的值是否为整数18
test -d tmp    	  #测试tmp是否为一个目录名
##### 字符串测试 ##### 
s1 = s2    #测试两个字符串的内容是否完全一样
s1 != s2   #测试两个字符串的内容是否有差异
-z s1 	    #测试s1字符串的长度是否为0
-n s1 	    #测试s1字符串的长度是否不为0
##### 整数测试 ##### 
a -eq b    #测试a与b是否相等
a -ne b    #测试a与b是否不相等
a -gt b    #测试a是否大于b
a -ge b    #测试a是否大于等于b
a -lt b    #测试a是否小于b
a -le b    #测试a是否小于等于b
##### 文件测试 ##### 
-d name    #测试name是否为一个目录
-e name    #测试一个文件是否存在
-f name    #测试name是否为普通文件
-L name    #测试name是否为符号链接
-r name    #测试name文件是否存在且为可读
-w name    #测试name文件是否存在且为可写
-x name    #测试name文件是否存在且为可执行
-s name    #测试name文件是否存在且其长度不为0
f1 -nt f2  #测试文件f1是否比文件f2更新
f1 -ot f2  #测试文件f1是否比文件f2更旧

条件语句

if [condition1]; then
    ...
elif [condition2]; then
    ...
else
    ...
fi

多路分支语句

case $variable in 
  "case1")
    ......
  ;;
  "case2")
    ......
  ;;
  "case3")
    ......
  ;;
  *)
    ......
  ;;
esac

循环语句

for var in con1 con2 con3 ...
do
    ......
done
while  [condition]
do
    ......
done

循环控制语句

break	     #终止执行所有循环
continue    #终止该次循环,进行下次循环

4. shell函数

把一个功能封装起来,使用时直接调用函数名,模块化,代码可读性强,扩展性方便。 shell中有两种定义函数的语法格式:

# 若写了function,可以省略函数名后的括号
function fname {
    ......
}
# 不写function时,函数名后需要加括号
fname() {
    ......
}

和其他编程语言不同的是,shell函数在定义时不能指明参数,但在调用时却可以传递参数,并且给它传递什么参数它就接收什么参数。 当然调用函数时也可以不传递参数。 函数调用方法如下:

# 不传递参数时,直接给出函数名即可
fname
# 如果要传递参数,多个参数之间以空格分开
fname param1 param2 param3

如下函数调用实例1:运行脚本后,输出www.baidu.com

#!/bin/bash
#定义函数
function url {	
    echo "www.baidu.com"
}
#调用函数
url

如下函数调用实例2:运行脚本后,输出传参值之和

#!/bin/bash

#定义函数:获取参数的和
function get_sum() {
	local sum=0
    for n in $@
    do
    	((sum+=n))
    done
    return $sum
}
#调用函数并传递参数
get_sum 10 2 5 7 9 12 50
echo $?
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    88

    文章

    3587

    浏览量

    93580
  • 程序
    +关注

    关注

    116

    文章

    3773

    浏览量

    80830
  • 函数
    +关注

    关注

    3

    文章

    4303

    浏览量

    62411
  • Shell
    +关注

    关注

    1

    文章

    363

    浏览量

    23287
  • 脚本
    +关注

    关注

    1

    文章

    387

    浏览量

    14829
收藏 人收藏

    评论

    相关推荐

    shell脚本进阶】几个常用的shell进阶脚本

    shell脚本进阶】几个常用的shell进阶脚本
    的头像 发表于 09-19 08:59 1835次阅读
    【<b class='flag-5'>shell</b><b class='flag-5'>脚本</b>进阶】几个常用的<b class='flag-5'>shell</b>进阶<b class='flag-5'>脚本</b>

    Shell基础知识(上)

    shell脚本在日常的Linux系统管理工作中是必不可少的。如果不会写shell脚本,你就不算是一个合格的管理员。目前,很多单位在招聘Linux系统管理员时,
    发表于 11-14 09:24 513次阅读

    linux shell脚本分享

    今天浩道跟大家分享shell脚本硬核干货,可以说是拿来即用序列!
    发表于 02-17 09:13 401次阅读

    Linux Shell脚本入门到实战详解

    Linux Shell脚本入门到实战详解
    发表于 02-17 15:03 624次阅读

    Linux shell脚本分享

    今天浩道跟大家分享几个Linux运维中常用到的shell脚本
    发表于 07-18 09:53 546次阅读
    Linux <b class='flag-5'>shell</b><b class='flag-5'>脚本</b>分享

    Shell脚本编程实验

    指示灯每隔一秒交替闪亮10次按照图中的脚本一字一句输入就行了,其中Shell基础知识一点都不清楚的话多百度下吧,上面有很多相关知识。这里我就脚本
    发表于 10-22 18:25

    嵌入式和物联网的shell脚本学习指南之shell脚本入门免费下载

    本文档的主要内容详细技术的是嵌入式和物联网的shell脚本学习指南之shell脚本入门免费下载。
    发表于 09-11 17:15 20次下载
    嵌入式和物联网的<b class='flag-5'>shell</b><b class='flag-5'>脚本</b>学习指南之<b class='flag-5'>shell</b><b class='flag-5'>脚本</b>入门免费下载

    shell脚本最简明的教程

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合
    的头像 发表于 10-16 11:27 4740次阅读
    <b class='flag-5'>shell</b><b class='flag-5'>脚本</b>最简明的教程

    109个实用shell脚本分享

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合
    的头像 发表于 03-16 08:58 2588次阅读

    Linux开发_Makefile规则与Shell脚本语言

    介绍Linux下Makefile编程知识点,Shell脚本知识点。
    的头像 发表于 09-17 15:40 1236次阅读

    shell脚本基础知识汇总1

    Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。 Linux 的 Shell 种类众多,常见的有:
    的头像 发表于 02-15 10:48 758次阅读

    shell脚本基础知识汇总2

    Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。 Linux 的 Shell 种类众多,常见的有:
    的头像 发表于 02-15 10:48 639次阅读

    shell脚本基础知识汇总3

    Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。 Linux 的 Shell 种类众多,常见的有:
    的头像 发表于 02-15 10:49 750次阅读

    shell脚本基础知识汇总4

    Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。 Linux 的 Shell 种类众多,常见的有:
    的头像 发表于 02-15 10:49 644次阅读

    Linux Shell脚本经典案例分享

    ​ 作为一名 Linux 运维工程师,会写好的脚本不仅能提高工作效率,还能有更多的时间做自己的事。最近在网上冲浪的时候,发现大家对Shell脚本都有“心结”,要么觉得自己写出来不好看,要么根本无从下手。 下面分享249个真实
    发表于 06-16 14:03 631次阅读
    Linux <b class='flag-5'>Shell</b><b class='flag-5'>脚本</b>经典案例分享