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


笔记资料仅供学习交流使用,转载请标明出处,谢谢配合。
作者:Aliven888

1、简述

shell脚本编程严格的来说就是 BASH 编程。我们在进行shell脚本编程时不需要变以及,也不需要什么集成开发环境(linux系统中),通常所使用的都是文本编辑器(VIM 或者 Emacs等)。

2、语法介绍

2.1、编程声明

  告诉 shell运行当前脚本该使用那个 shell 程序。
格式:
  #! /bin/bash : 指定脚本运行环境为 /bin/bash

2.2、注释

  在编程中,必要的注释,有利于提高我们编程的可读性,而 shell编程也不例外。

格式:
  # + 注释描述文本

eg:
  # this is a comment

2.3、 输入/输出打印

shell程序虽然并不经常和用户进行大量的交互,但是有些时候必要的输入还是必须的。这里简单介绍下输入和输出的常用指令—— readecho

2.3.1、 输入

在linux中使用shell进行脚本编程时,输入参数使用read指令。

格式:
  read + 变量名(变量可以有多个,使用空格隔开)

注意事项:

  1. 阻塞型的命令,遇到 enter 键终止阻塞,开始执行下一条指令。

演示实例:

#! /bin/bashread num1 num2echo "current input value is $num1 - $num2"

结果输出:

2.3.2、 输出打印

  我们在进行编程开发的目的就是输出打印结果值,echo 命令把其参数传递给标准输出(显示器);echo指令打印输出参数后会自动换行,因此不必再添加换行符。如果是输出某个变量,需要使用 “$”符号配合。

格式:
  echo “hello word” //输出字符串。

#! /bin/bash# this is a comment
echo "hello world"

结果输出:

2.4、 变量与运算符定义

变量运算符 时所有编程语言都必须所具备的元素。

2.4.1、 变量的定义与使用

shell编程中定义一个变量不需要使用数据类型来进行声明,直接使用 “=” 赋予初始值就可以使用了。

格式:
  value = “shell is very good”

#! /bin/bash# this is a comment
echo "hello world"
value="shell is very good"
echo $valueiValue=100
echo $iValue

注意事项:

  1. “=” 前后不能有空格,否则会编译失败(错误写法:value = “ok”)

结果输出:

2.4.2、 变量替换

  因为"$"是输出提示符,所以当我们想输出该符号时,可以考虑使用转义字符 ‘/’ 来实现。
  同时,shell也提供了 “{}” 来限定一个变量的开始与结束;在紧跟变量输出字母后缀时可以使用该功能。

演示实例:

#! /bin/bash# this is a commentvalue=100
echo "current \$value is $value"good="1234"
echo "num is ${good}56789"

结果输出:

2.4.3、变量的位置

  有时我们启动shell脚本时需要传入参数,这时我们就可以使用位置变量来实现。在shell编程中系统为我们提供了[$0 - $n];其中$0比较特殊,里面存放的是当前脚本的名称;而在需要传递的参数超过10的时候,需要使用 “{}” (例如: ${11}, ${12} …)。

演示实例:

#! /bin/bashecho "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
echo "\$4 = $4"

结果输出:

2.4.4、BASH 引导规则

格式:

  1. 双引号 —— 阻止shell对大多数的特殊字符进行解释(例如:#);但是 ‘ $ ’、‘ ` ’、 ‘ " ’、仍然保持其特殊含义。
  2. 单引号 —— 阻止 shell 对所有的字符进行解释。
  3. 到引号 —— ‘ ` ’这个符号通常位于 Esc 键的下方;当用改符号括起一个shell命令时,这个命令会被执行,执行后的输出结果作为这个表达式的值。改符号内的特殊字符一般都会被解释的

演示实例:

#! /bin/bashvalue="good"# 双引号会对 $ 进行解释
echo "today is $value"# 单引号不会对 $ 进行解释
echo 'today is $value'# 倒引号 会对其中的 shell 命令进行解释
echo "current path is `pwd`"

结果输出:

2.4.5、运算符

shell脚本中的运算符合其他语言的差不多,接下来以表格的形式进行介绍。

运算符 含义
+, - 单目正,单目富
!, ~ 逻辑非,按位取反
*, /, % 乘,除,取余
+,- 加, 减
<< , >> 按位左移, 按位右移
<=, >=, <, > 小于等于,大于等于,小于,大于
==, != 等于, 不等于
& 按位与
^ 按位异或
| 按位或
&& 逻辑与
|| 逻辑或
=, +=, -+, *=, /=, %=, &=, |=, <<=, >>= 赋值,运算并赋值

注意事项:

  1. shell编程中,表示相等时, “==” 和 “=” 在大部分情况下不存在差异,这和其他编程语言是由差异的。

2.5、表达式求值

  在shell编程中,表达式求值一般使用 “$[]” 实现;如果想实现按照某种进制参数运算,可以在中括号中添加 base#n(表示n是按照base进制显示的,例如 $[16#20] 表示20是按照16进制显示的。)。
  其中expr的功能增加的强大,这个命令可以使用在更加复杂的算式中,使用起来也更加的灵活;该命令在计算表达式后,会直接把结果输出。
  如果我们仅仅是用来计算整数类型的算式,还可以使用let指令。

格式:
  $[num1 + num2] 或者 $[10#20 + num2]

  expr 1 + 2 : 计算并输出 1 + 2 的值。

  let sum = num1+num2

演示实例:

#! /bin/bashnum1=10
num2=22echo $[$num1+ $num2]echo $[16#10 + $num2]echo $[8#10 + $num2]expr 1 + 2sum=0
let sum=$num1+$num2
echo "sum = $sum"

注意事项:

  1. 在linux7.0版本中演示时发现按进制参数运算时,base#n 中的 n 必须是个常数,否则会报错。
  2. 在使用expr时,数字,运算符之间必须要有空格,否则系统会默认为字符串。

结果输出:

2.6、脚本编程语法

2.6.1、if 条件语句

if命令用于判断条件是否成立,进而决定是否执行相关语句。该语法在编程中可以说是使用频率比较高的一个了。
格式:

# 用法1
if [ 条件 ]
then执行体1
else执行体2
fi # 用法2
if [ 条件1 ]
then执行体1
elif [ 条件2 ]
then执行体2
elif [ 条件3 ]
then 执行体3
else执行体4
fi

注意事项:

  1. 在条件语句中, “[”、"]" 、条件语句三者之间都有有空格隔开;而且条件中运算符号与变量(常量)之间也要有空格,否则将会报错。

演示实例:

################### 用例1###################
#! /bin/bashif [ "1" = $1 ]
thenecho "current value is 1"
elseecho "current value is not 1"
fi################### 用例2 ###################
#! /bin/bashif [ "1" = $1 ]
thenecho "current value is 1"
elif [ "2" = $1 ]
thenecho "current value is 2"
elif [ "3" = $1 ]
thenecho "current value is 4"
elseecho "current value is unknow."
fi

结果输出:

2.6.2、case 多选语句

shell中还有另外一种控制结构,那就是case,用于在一系列的模式中匹配某个变量的值。

格式:

case word in类型1)执行体1;;  #结束符,类似于C语言中的 break类型2)执行体2;; 类型3)执行体4;;...*)  # 匹配全部,类似于c语言中的 default执行体5;;
esac  # case 单词反写

演示实例:

#! /bin/bashcase "$1" in"1")echo "current input value is 1";;"2")echo "current input value is 2";;"3")echo "current input value is 3";;*)echo "current input others value...";;
esac

注意事项:

  1. 在linux中,case没有默认执行体,执行完条件体后就会推出,如果想设置一个默认执行体,可以使用 “*)”做条件,但是之能放在最后一个位置。

结果输出:

2.7、循环结构

  循环结构用于反复执行某一段语句,这也是程序设计中比较中要的一个语法之一。在 shell中常用的循环结构有 whileuntilfor三种。

2.7.1、while 循环

while语句重复执行指令;遇到条件为真(值为0),则执行循环体;而如果遇到条件为假(值非0),退出循环。

格式:

while 执行条件
do循环体
done

演示实例:

#! /bin/bashsum=0
number=1while test $number -le 100
dosum=$[ $sum + $number ]let number=$number+1
doneecho "1+2+3+4+...+100 = $sum";

注意事项:

结果输出:

2.7.2、until 循环

untilwhile的另一种写法,但是执行条件与while相反。until是遇到条件为假(值非0),则执行循环体(即执行循环体直到条件为真【值为0】)。

格式:

until 执行条件
do循环体
done

演示实例:

#! /bin/bashsum=0
number=1until ! test $number -le 100
dosum=$[ $sum + $number ]let number=$number+1
doneecho "1+2+3+4+...+100 = $sum";

注意事项:

  1. while test $number -le 100 和 until ! test $number -le 100 是等价的。

结果输出:

2.7.3、for 循环

  与前两中循环相比较,for的优点在于可以从集合中逐一遍历集合的值。

格式:

for value [ in list ]
do循环体
done

演示实例:

#! /bin/bashfor i in 1 2 3 4 5 6 7 8
doecho "print --- $i"
done

结果输出:

2.8、exit 命令

exit 用于强制退出一个脚本,并且向调用这个脚本的进程返回一个整数值。

格式:
  exit num

注意事项:

  1. 在一个进程成功运行之后,总是向其父进程返回数值 0 ;而其他非 0 的返回值都表示发生了异常

演示实例:

#! /bin/bashread num1 num2echo "current input value is $num1 - $num2"exit 0

linux编程 —— shell编程脚本常用语法总结 【学习笔记】相关推荐

  1. shell for循环1到100_浅谈Linux下shell 编程的for循环常用的6种结构

    浅谈Linux下shell 编程的for循环常用的6种结构 1. 常用for循环结构 (1) for 变量 in 值1 值2 值3... do 程序块儿 done (2) for 变量 in `命令` ...

  2. linux中快捷脚本,Linux下Shell编程快捷键大全(日常整理)

    有时候,我们需要在 Bash 中重复执行先前的命令.你当然可以使用上方向键来查看之前曾经运行过的命令.但这里有一些更好的方式,例如,数量掌握以下的快捷键. 1) !!:重复执行上一条指令 2) !a: ...

  3. 运维 - 第一阶段 - linux与shell编程

    linux与shell编程 讲师:墨竹 系统运维与linux 1.系统运维是什么 简单来说运维(Operation and maintenance)是指对公司硬件和软件的维护. 硬件包括:机房.机柜. ...

  4. Linux之shell编程篇-----Shell 函数和Shell 输入/输出重定向

    ​ 最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程 废话不多说,请看正文! ​ Shell 函数 1. 自定义函数 linux she ...

  5. shell脚本常用语法大全

    shell脚本常用语法大全 一.shell简介 二.shell常用命令 2.1echo 2.2printf 2.3test 三.shell变量 3.1变量命名规则 3.2赋值方式 3.3使用变量 3. ...

  6. Linux _ Shell编程 — 循环语句

    Linux _ Shell编程 - 循环语句 一.循环语句for的用法 二.循环语句while的用法 三.循环控制语句 一.循环语句for的用法 for 变量名 in 单词表do命令表done 变量依 ...

  7. linux系统——Shell编程之变量解释

    linux系统--Shell编程之变量解释 - Shell能做什么 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略-) 自动化批量软件部署程序 (LAMP,LNMP,Tomca ...

  8. Linux _ Shell编程 — 功能语句

    Linux _ Shell编程 - 功能语句 一.说明性语句 二.常用功能性语句 1.常用功能性语句(read命令) 2.expr命令 三.结构性语句 条件测试语句 字符串测试 整数测试 文件的测试 ...

  9. 《Python核心编程(第3版)》学习笔记及书评

    <Python核心编程(第3版)>学习笔记 文章目录 <Python核心编程(第3版)>学习笔记 写在前面 1. 正则表达式 1.1 常用语法 1.2 re模块 2. 网络编程 ...

  10. Java 3D编程实践_Java 3D编程实践——网络上的三维动画[学习笔记]

    评论 # re: Java 3D编程实践--网络上的三维动画[学习笔记] 2006-08-24 23:41 gy # re: Java 3D编程实践--网络上的三维动画[学习笔记] 2007-03-2 ...

最新文章

  1. UA MATH575B 数值分析下I 梯度下降
  2. 19道小米网运维工程师笔试真题
  3. 洛谷 刷题 深基部分题解(python版)-2022.01.29
  4. docker mysql开机自启动_Docker 学会让容器开机自启服务
  5. openGauss凝聚创新力量,云和恩墨MogDB加速社区发展
  6. SQL SERVER 2016 AlwaysOn 无域集群+负载均衡搭建与简测
  7. C语言调用自定义交换函,C语言函数篇 - personal page of Msingwen - OSCHINA - 中文开源技术交流社区...
  8. 实习、竞赛、论文?关于计算机读研的一些小建议!
  9. 循环队列的创建Java_Java版-数据结构-队列(循环队列)
  10. 人脸识别门禁系统java实现_基于 Java 实现的人脸识别功能(附源码)
  11. CMA检测报告中,CNAS,CMA分别代表的意义
  12. Ti的C28x系列的DSP(28069)使用经验,SCI与RS485(ADM2587EBRWZ)
  13. android开发转盘按钮,Android中的转盘
  14. LOJ10144宠物收养所
  15. 雷达动目标检测matlab代码,【代码分享】基于最大互信息的运动目标检测[matlab源码]...
  16. CUDA对应的NVIDIA驱动版本对照表
  17. 【Laravel笔记】10. 模型的关联查询
  18. GOJS入门三-如何设置节点间的连线
  19. 健忘的业余编程菜鸟在这里安窝
  20. 美国国防高级研究计划局(DARPA)组织管理运行机制分析

热门文章

  1. 版本管理工具 git和SVN 忽略文件和目录
  2. Git安装教程(Windows安装超详细教程)
  3. eclipse开发android入门学习
  4. 《A Graduate Course in Applied Cryptography》Chapter 13 Digital Signatures(2)
  5. python编程题12-计算并联电阻
  6. 2020年2月12日学习记录
  7. 如何提高深度学习预测准确率
  8. 排污单位门禁、视频、参数监控联网数据采集传输仪
  9. MySQL定时任务(EVENT|事件)如何配置,必会技能!
  10. Vue2到Vue3实战必备技能(一)