摘要

Shell程序,就是把需要计算机执行的Linux命令罗列到一个文件,再加上控制语句。解释型语言,不需要编译,即脚本文件。Linux下常用的用户登录Shell有Bash,sh,csh,tcsh,ksh,它们同时也是Shell程序解释器。
解释器不同,语法也有些差别。
Bash是Linux默认的Shell程序解释器。

文章目录

  • 摘要
  • 创建步骤
  • 结构与基本语法
  • 变量
  • 控制语句
    • 顺序结构:
    • 分支结构
    • 循环结构
  • Shell程序调试

创建步骤

  • 新建一个文件并打开touch filename or vim filename
  • Vim编辑器进入插入模式i,编辑写入脚本
  • 写好后存盘退出wq!
  • 修改文件权限,增加可执行权限chmod +x filename
  • 执行文件./filename

结构与基本语法

Shell程序由三部分组成:首行、注释行、程序体。

  1. 首行

经常在Shell程序的首行指明本Shell采取哪个解释器:

#!/bin/bash

如果没有指明,将会采用用户登陆Shell程序来解释执行,查看用户登陆Shell程序名命令为

echo $SHELL
  1. 注释行
    除首行外以#开头的行是注释行
  2. 程序体
    包含三类结构语句:顺序、分支、循环结构。

变量

Shell变量根据赋值类型决定数据类型,每次赋值可以重新修改变量数据类型。包括

  • 普通变量 :数值、字符串
  • 一维数组变量 :数组下标从0开始编址。
  • 特殊变量:由Bash自动定义和赋值,用户不能修改。
  1. 赋值语句
i=1
str="Hello World"
array=(zhao wang sun li)

注意:赋值等号左右边不要有空格。

  1. 引用变量: ${变量名}
echo ${i} #打印变量i
j=`exp ${i}+1` #计算i+1并赋值给j
echo ${array[0]}  #输出"zhao"
echo ${array[*]}  #输出"zhao wang sun li"
array[0]=liu  #将array的第一个元素修改为liu
Array=("${array[*]}")  #创建尺寸、值与array相同的数组Array

注意:不要随便出现空格,与python完全不一样的感觉,否则就会无法成功执行。

  1. 一些常用的特殊变量,在程序体中插入echo 变量名就可以显示变量值。
变量名
$$ 表示当前进程号,即PID
$? 前一个命令的退出状态,0执行成功,1执行失败
$# 命令行参数个数,不包括命令本身
$0 命令本身
$i 0< i <9, 命令行的第i个参数,两位数后得 {} 起来
$* 全部命令行参数

控制语句

顺序结构:

从上到下顺序执行一系列命令

分支结构

  1. 判断表达式真假
test 表达式
[表达式]
判断表达式 含义
!表达式 表达式逻辑值取反
表达式1 -a 表达式2 逻辑运算"与"操作
表达式1 -o 表达式2 逻辑运算"或"操作
=/!= 字符串的比较
-eq 整数相等
-ge/-gt 大于/大于等于
-le/lt 小于/小于等于
-d file file是目录为真
-e file 是文件为真
-z string string是空字符串为真
  1. 分支语句
if list;
then list;
elif list;
then list;
else list;
fi
case word in [pattern1]) list;;[pattern2]) list;;*) listlist2;;  #否则,就执行list
esac

注意:一个匹配模式下可以出现多条语句。

循环结构

#!/bin/bash
#example1 ---for
for i in 1 2 3 4 5;
doecho "${i}次|"
done
#分号无影响
for i in 1 2 3 4
doecho "`expr ${i} \* ${i}`次"
done#example2
for((i=1;i<10;i++));
doecho "第${i}次"
done#example3---while
total=0
while read line;
dototal=(expr ${total} + 1)
done<<(cat /etc/passwd)     #显示/etc/passwd文件内容并作为while命令的输出(输入重定向)
echo ${total}#example4
#!/bin/bash
PS3="Please select:"  #显示Shell变量PS3的值,并等待用户输入,输入值赋给menu
menus="com|net|org|edu|quit"
IFS="|"   #Shell变量IFS的值作为分隔符,切割menus为多个项。并在每个项前加一个序号并以列的形式显示到显示器上。
select item in ${menus};docase ${item} incom) echo "Apply com domain";;net) echo "Apply net domain";;org) echo "Apply org domain";;edu) echo "Apply edu domain";;quit) break;;esac
done

运行结果如下所示:

hazel@hazel-VirtualBox:~/code$ ./gram.bash
1) com
2) net
3) org
4) edu
5) quit
Please select:3
apply org domain
Please select:2
apply net domain
Please select:1
apply com domain
Please select:4
apply edu domain
Please select:5

循环控制语句:breakcontinue;二者都只能出现在循环体中,前者是退出循环,后者是跳出该轮,进入下一轮循环。

#example5
#!/bin/bash
for file in *;doif[${file}="." -o ${file}=".."]  then continue  #对于.和..不做处理fi[${fil}="123"]&&break  #遇到文件123就跳出循环,&&命令序列连接符cp -r ${file} ${file}.old  #其他文件就备份
done

Shell程序调试

Shell程序是解释性语言,常用办法是带-x执行程序将执行到的语句全部显示出来。

bash -x file.bash

代码很长时(语句最好不要超过1000行),可在需要调试的程序块前后增加调试标记,块前插入set -v,块后插入set +v。调试时 就会只打印调试块中的执行语句。

bash脚本程序语法Linux相关推荐

  1. linux如何调试脚本程序,调试Linux shell脚本的方法

    在linux中调试shell脚本,常用的有三个方法.这里介绍下,希望对大家有所帮助. 方法一,使用echo命令. 在调试shell脚本时,可以用echo打印任何变量值,以判断错误原因. 方法二,she ...

  2. 如何改进你的脚本程序

    你是否曾经查看过某个软件发行方提供的安装用的脚本script程序?为了能够适应不同用户的系统配置,顺利完成安装,这些脚本程序经常包含很多函数和逻辑分支.多年来,我积累了一些改进脚本程序的一些技巧,这里 ...

  3. Bash脚本的空格和“期待一元表达式”错误

    很少自己写Bash脚本,一写就出现了一些奇怪的问题,主要还是对Bash脚本的语法不够熟悉,毕竟很少使用. 当做记录一下吧,今天因为空格导致的一些脚本问题: 1.Bash脚本中的赋值符号"=& ...

  4. linux的逻辑运算参数,Linux基础之bash脚本编程初级-逻辑运算与测试

    引言 前面介绍了bash编程的基础变量与算术表达式,本文介绍在脚本中的进阶知识:测试 在bash中测试大体分两部分:条件测试.组合测试. 而条件测试又分:数值测试.字符串测试.文件测试. 组合测试则有 ...

  5. Linux之bash编程基本语法

    在Linux运维工作中,我们为了提高工作效率通常会用bash编写脚本来完成某工作. 今天就来为大家介绍bash的一些常见的基本语法. 在讲解bash语法之前首先介绍一下bash. bash环境主要是由 ...

  6. linux编写脚本读取txt文件,用bash脚本或者批处理 bat脚本 读取一个目录下.txt文件第一行内容存放到新文件a.txt...

    起因:我把cmd 控制台说成了dos! 发展:人类生气了,跟我扯了一堆 dos 还有什么玩意儿,在我第二次还说那个是dos界面以后:( 后续:人类要我写 批处理bat 还有linux bash 脚本去 ...

  7. Linux脚本:Bash脚本看这一篇就够了

    前言 Linux脚本有很多解析器(Shell),不同解析器要求的脚本语法是不一样的.系统在解析脚本时,如果没有在脚本声明指定解析器,则会采用系统默认解析器来对脚本进行解析.sh是非常重要解析器,历史很 ...

  8. linux编程 —— shell编程脚本常用语法总结 【学习笔记】

    文档声明: 以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正.并且该文档在后期会随着学习的深入不断补充完善.感谢各位的参考查看. 笔记资料仅供学习交流使用,转载请标明出处 ...

  9. linux内核与bash脚本接囗,Bash脚本编程之脚本基础和bash配置文件

    脚本基础 不严谨地说,编程语言根据代码运行的方式,可以分为两种方式: 编译运行:需要先将人类可识别的代码文件编译成机器可运行的二进制程序文件后,方可运行.例如C语言和Java语言. 解释运行:需要一个 ...

最新文章

  1. 安装linux 系统报错:No DEFAULT or UI configuration directive found 解决方法
  2. CentOS 6.8 GRUB加密-修复和破解密码实战指南
  3. docker in all
  4. 字符串的初值 正则表达式 sed应用
  5. 北风设计模式课程---7、建造者模式
  6. 大会线上同步直播, 来不到现场也可以线上看直播,以及参会秘籍
  7. webservice 启用代理服务器
  8. 将信息系学生的计算机文化学,计算机等级考试(国家)-关系数据库操作语言sql(四)...
  9. MVC:感觉用户认证标识(IsAuthenticated)有点延时。
  10. Flutter APP UI Components
  11. java环境变量的配置_一文带你学会Java环境变量配置(小白向)
  12. Mysql数据库中,大小写区分
  13. c++如何让字符串重复输出_Python基础三(数据类型之数字和字符串)
  14. 生物信息分析员的编程小站
  15. 数模混合计算机应用,数模混合集成电路的发展现状和前景
  16. 一键圣诞帽 html5源码,HTML5在线教程之微信小程序“圣诞帽”的实现思路详解
  17. 如何解决用户对浏览器进行缩放或滚动鼠标滑轮、或调节屏幕显示百分比后,页面变形或显示不全
  18. keep sb updated_keep you update 和keep you updated哪个正确?
  19. powershell导入脚本失败,禁止运行脚本,无法远程连接服务器
  20. linux两个进程同时打开串口,linux串口操作及设置详解

热门文章

  1. 全球及中国汽车铝合金行业“十四五”规划与未来需求分析报告2022-2028年
  2. android 代码设置 键盘适应_详细讲解Android修改键盘文字的方法
  3. RK3288核心板金手指接插方式支持 Android5.1 Android7.1、Linux 操作系统
  4. BDCC- 数据湖体系
  5. 洋马儿下坡坡,不用你踩(理睬)
  6. kali安装所有工具
  7. 事件代理(事件委托)、事件冒泡
  8. 7月22日第壹简报,星期五,农历六月廿四
  9. 仁兄,可曾听闻OpenVINO
  10. 工作族必备的备忘录时间管理APP软件