Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。
示意图:

脚本格式要求:

  1. 脚本以#!/bin/bash开头
  2. 文件必须有可执行权限

创建第一个shell脚本

在这里我们先创建一个hello.sh文件,然后用vi编辑器输入内容

执行方式:

  1. 通过sh/bash命令执行
  2. 先给文件赋予可执行权限,然后通过相对路径或绝对路径的方式执行

    绝对路径执行:

shell变量

介绍

1)Linux Shell 中的变量分为,系统变量和用户自定义变量
2)系统变量:$ HOME、$ PWD、$ SHELL、$ USER 等等

定义变量:变量=值
撤销变量:unset 变量
声明静态变量:readonly 变量,注意:不能 unset

案例 1:定义变量 A,然后撤销变量 A

案例 2:显示当前 shell 中所有变量:set

定义变量的规则

  1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
  2. 等号两侧不能有空格
  3. 变量名称一般习惯为大写

将命令的返回值赋值给变量(重点)

也就是在shell文件里使用终端的命令,并将命令返回的字符串返回给变量。
方法:

注意:反引号在键盘esc键的下面,一般我们习惯使用上述第二种方式赋值。
案例:


上面我们将ls -l /home 命令的返回值赋给了LS变量,date命令赋值给了MY_DATE变量,然后输出。

设置环境变量

  1. export 变量名=变量值 (功能描述:将 shell 变量输出为环境变量)
  2. source 配置文件(功能描述:让修改后的配置信息立即生效

Linux里将环境变量存放在/etc/profile文件里

案例:设置tomcat的环境变量


使用vim编辑/etc/profile文件,在文件末尾添加export语句,然后使用source命令让文件生效,最后使用echo测试输出TOMCAT_HOME成功。

位置参数变量

当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。比如我们执行一个shell脚本,可以在执行命令后面跟参数作为变量传入文件内使用,这就是位置参数变量。
语法:

  • $ n (功能描述:n 为数字,$ 0 代表命令本身,$ 1-到$ 9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如$ {10})
  • $ * (功能描述:这个变量代表命令行中所有的参数,$ *把所有的参数看成一个整体)
  • $ @(功能描述:这个变量也代表命令行中所有的参数,不过$ @把每个参数区分对待)
  • $ #(功能描述:这个变量代表命令行中所有参数的个数)

案例:
$ 0表示命令名,$ 1代表第一个参数…,在执行脚本前应为文件添加可执行权限,在这里$ @与$ *都代表全部参数,但是两种间有略微差别,将他们用引号引起来分别对他们进行迭代时,$ *一次会输出全部参数$ @则会一个个输出。

参考https://blog.csdn.net/miachen520/article/details/98661139



预定义变量

就是 shell 设计者事先已经定义好的变量,可以直接在 shell 脚本中使用
语法:

  • $$ :当前进程的进程号(PID)
  • $! :后台运行的最后一个进程的进程号(PID)
  • $?:最后一次执行的命令的返回状态。0表示成功,非0表示不成功。

案例:
创建preVar.sh文件,在第二行进行后台执行position.sh(在命令后面加&),最后返回成功执行状态

运算符

语法:

  1. ((算术表达式))
  2. [算术表达式]
  3. expr 算术表达式(运算符直接必须加空格)

案例:

  • 计算(3+2)*4
  • 2.计算两个参数的和

条件判断

语法:
[ condition ](注意 condition 前后要有空格)
非空返回 true,可使用$?验证(0 为 true,>1 为 false)

常用判断条件

  1. 两个整数的比较
    = 字符串比较
    -lt 小 于
    -le 小于等于
    -eq 等 于
    -gt 大 于
    -ge 大于等于
    -ne 不等于
  2. 按照文件权限进行判断
    -r 有读的权限 [ -r 文件 ]
    -w 有写的权限
    -x 有执行的权限
    3)按照文件类型进行判断
    -f 文件存在并且是一个常规的文件
    -e 文件存在
    -d 文件存在并是一个目录

案例:

  1. “ok"是否等于"ok”
  2. 23是否大于22

    结果:
  3. aaa.txt文件是否存在
  4. aaa.txt文件是否有读写权限

流程控制

if判断

语法

  1. if [ 条件判断式 ];then
    程序
    fi
  2. if [ 条件判断式 ]
    then
    程序
    elif [ 条件判断式 ]
    then
    程序
    fi
  3. if [ 条件判断式 ]
    then
    程序
    else [ 条件判断式 ]
    then
    程序
    fi

注意:中括号与条件判断式之间必须要有空格
案例:判断输入参数大于等于80优秀,大于等于60及格,否则不及格

case语句

语法:
case $变量名 in
“值 1”)
如果变量的值等于值 1,则执行程序 1
;;
“值 2”)
如果变量的值等于值 2,则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
案例:当命令行参数是 1 时,输出 “周一”, 是 2 时,就输出"周二", 其它情况输出 “其他”

for循环

有两种形式

  1. for 变 量 in 值 1 值 2 值 3…
    do
    程序
    done
    案例1:打印命令行参数

  2. for (( 初始值;循环控制条件;变量变化 ))
    do
    程序
    done
    案例2:1到100累加并输出

while循环

语法
while [ 条件判断式 ]
do
程序
done
案例:命令行输入一个数n,计算1+…+n的值

read读取控制台

read(选项)(参数)
选项:

  • -p:指定读取值时的提示符;
  • -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了

参数变量:指定读取值的变量名

案例:
1.读取控制台输入一个 num 值
2. 读取控制台输入一个 num 值,在 10 秒内输入。

测试案例2时第一次十秒内未输入,第二次输入

函数

shell 编程和其它编程语言一样,有系统函数,也可以自定义函数。这里介绍两个系统函数。

两个系统函数

  • basename
    功能:返回完整路径后面的部分,常用于获取路径名
    语法:
    basename[路径名][后缀]

注意:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来,如果选项带有后缀,返回值将会把后缀删掉

案例:

  • dirname
    功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)

案例:

自定义函数

语法:
[ function ] funname[()]
{
Action;
[return int;]
}
案例:就是输入的两个数之和

Linux——shell编程相关推荐

  1. Linux Shell 编程学习总结

    Shell 教程 Shell简介:什么是Shell,Shell命令的两种执行方式 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成 ...

  2. linux实验三shell程序设计,实验三 LINUX SHELL编程

    精选文库 -实验三LINUX SHELL 编程 四.实验内容 本实验包含两个具体的SHELL程序编写任务,较为全面地涉及了SHELL 程序的设计方法和技术.内容如下: 1.创建以下菜单程序: USER ...

  3. linux —— shell 编程(文本处理)

    导读 本文为博文 linux -- shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed a ...

  4. 【“计算机科学与技术”专业小白成长系列】Linux Shell 编程 极简教程

    Linux Shell 编程 极简教程 内容摘要 本文是 Linux Shell 编程简单入门.主要内容: Linux 简介 Shell 编程入门 Kotlin 脚本与 Shell 脚本 Linux ...

  5. 《Linux Shell编程从初学到精通(第2版)》pdf

    下载地址:网盘下载 内容简介 编辑 shell是用户与内核进行交互操作的一种接口,是linux最重要的软件之一.目前最流行的shell称为bash shell,bash shell脚本编程以其简洁.高 ...

  6. linux简单重定向代码,Linux Shell编程(26)——代码块重定向

    像 while, until, 和 for 循环代码块, 甚至 if/then 测试结构的代码块都能做到标准输入的重定向. 即使函数也可以使用这种重定向的格式 .所有的这些依靠代码块结尾的 < ...

  7. Linux Shell编程语句case

    Linux Shell编程case语句 case语句 case语句适用于需要进行多重分支的应用情况. case分支语句的格式如下:case $变量名 in模式1)命令序列1;;模式2)命令序列2;; ...

  8. linux shell 处理日语,linux —— shell 编程(文本处理)

    导读 本文为博文linux -- shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 1.基本文本处理 sort:用于排序,常 ...

  9. linux怎么退出shell编程,Linux Shell编程(11)——退出和退出状态

    exit命令一般用于结束一个脚本,就像C语言的exit一样.它也能返回一个值给父进程. 每一个命令都能返回一个退出状态(有时也看做返回状态).一个命令执行成功返回0,一个执行不成功的命令则返回一个非零 ...

  10. 「Linux」Linux Shell 编程基础入门

    Linux Shell 编程基础入门 1. 变量 1.1 变量定义 1.2 使用变量 1.3 引号 1.4 将命令的结果赋值给变量 1.5 位置参数 1.6 特殊变量及其含义 2. 字符串 2.1 字 ...

最新文章

  1. python编程面向对象很简单,只需要掌握这几点
  2. 程序员学历低,该被歧视吗? | 每日趣闻
  3. 求链表倒数第k个结点
  4. Touchpad Synaptics 触摸板(中文) [zt]
  5. Luogu P2735 电网【真·计算几何/Pick定理】By cellur925
  6. Python中用input()和print()体现输入输出重定向
  7. Python精通-Python元组操作
  8. 话说 Oracle ACE 这回事儿
  9. 一套OA系统 破解中小企业4大管理难题
  10. moments音标_moment  是什么意思_moment  的翻译_音标_读音_用法_例句_爱词霸在线词典...
  11. LightProxy 无线端代理iOS,安装验证证书后仍不生效
  12. 芯片封装测试CP,FT,WT基本概念
  13. 常见的图像重采样算法
  14. JS--JS运行三部曲--渡一教育(视频笔记)
  15. 车道线识别(一) 简单识别
  16. PCB javascript实现个税5000计算
  17. Bright Star - John Keats
  18. Python Qt GUI设计:UI界面可视化组件、属性概述(基础篇—4)
  19. C语言:编写一个程序判断一个数是否为素数/
  20. 发送短信验证码倒计时,CountDownTimer;

热门文章

  1. Linux搭建SVN服务器
  2. 信息检索的过去 当前 未来-------浅层分析报告
  3. JQuery实战图片特效-遁地龙卷风
  4. JS如何判断一个对象是否为JSON对象
  5. mysql中clear怎么用_MySQL 入门篇
  6. 国际会议poster: 海报制作流程 格式介绍
  7. AWVS 13 Docker版本(破解后)
  8. SSCOM下载及无法打开问题解决
  9. 窃取百度搜索结果曝光,今日头条一直穿着“皇帝的新装”?
  10. 使用winRAR脚本bat,需要的参数