文章目录

  • 1.什么是Shell程序?
  • 2. Shell编程中变量的声明、引用及作用域
  • 3.Shell编程中位置参量使用和命令执行状态码
  • 4.Shell编程中数组、data和cal命令
    • 4.1 数组
    • 4.2 date指令
    • 4.3 cal指令
  • 5. Shell编程中判断表达式以及if语句使用
    • 5.1 判断表达式
    • 5.2 if判断语句
  • 6.Shell编程中的for循环、while循环
    • 6.1 for循环
    • 6.2 while循环

Linux基础传送门:

  • Linux基础—1.Linux系统(CentOS6.7)详细安装过程
  • Linux基础—2.Linux中的文件基本命令以及四大远程连接工具XShell、FileZilla、Notepad++、Xmanager4的使用
  • Linux基础—3.Linux基础命令总结【有图有真相】
  • Linux基础—4.Linux系统管理命令【由图有真相】
  • Linux基础—5.Shell基础编程【有图有真相】

1.什么是Shell程序?

  1. 以文件形式存放批量的Linux命令集合,该文件能够被Shell解释执行,这种文件就是Shell脚本程序。
  2. 通常由一段Linux命令、Shell命令、控制语句以及注释语句构成
  3. Shell脚本的编写。
    Shell脚本是纯文本文件,可以使用任何文本编辑器编写Shell脚本,通常是以.sh 作为后缀名。

2. Shell编程中变量的声明、引用及作用域

  1. Shell程序的第一行:用来指定用哪个程序来编译和执行脚本。
    #!/bin/bash或者#!/bin/sh,sh是bash程序的软连接。这里的#不是注释,是特殊命令。

  2. 变量命名
    变量名必须以字母或下划线开头,后面可以跟字母、数字或下划线。任何其它字符都标志变量名的结束。变量名关于大小写敏感。通过$符号来引用变量名。

  3. 变量类型
    根据变量的作用域,变量可以分为本地变量和环境变量。而环境变量又分root用户的环境变量与某个用户的环境变量。root用户的环境变量设置在/etc/profile文件下,某个用户的环境变量设置在/home/swpu/.bash_profile文件中。

    [swpu@centos ~]$ ll -al
    total 28
    drwx------. 2 swpu swpu 4096 May 18 22:26 .
    drwxr-xr-x. 3 root root 4096 May 18 20:44 ..
    -rw-------. 1 swpu swpu   51 May 18 21:11 .bash_history
    -rw-r--r--. 1 swpu swpu   18 Mar 23  2017 .bash_logout
    -rw-r--r--. 1 swpu swpu  176 Mar 23  2017 .bash_profile
    -rw-r--r--. 1 swpu swpu  124 Mar 23  2017 .bashrc
    -rw-rw-r--  1 swpu swpu    0 May 18 22:26 dis.sh
    -rw-rw-r--  1 swpu swpu  240 May 18 21:36 lj-log.txt
    [swpu@centos ~]$ vi .bash_profile# .bash_profile# Get the aliases and functions
    if [ -f ~/.bashrc ]; then. ~/.bashrc
    fi# User specific environment and startup programsPATH=$PATH:$HOME/binexport PATH# 添加用户环境变量
    export NAME_TEST=liujie
    

    保存后;

    [swpu@centos ~]$ source .bash_profile
    [swpu@centos ~]$ echo $NAME_TEST
    liujie
    


    本地变量只在创建它们的 shell程序中可用。而环境变量则在Shell中的所有用户进程中可用,通常也称为全局变量。

  4. 变量赋值
    等号两边不能有空格
    如果要给变量赋空值,可以在等号后面跟一个换行符

  5. 显示变量的值的命令:echo $variable或者echo ${variable}

  6. 清除变量的值的命令:unset variable

  7. 显示当前用户的所有变量命令:set

  8. 环境变量称为全局变量,按照惯例,需要大写:export LANG
    注意:可被所有的Shell环境下访问;
    如果父Shell进程产生了子Shell进程,则环境变量可被“继承”并复制

3.Shell编程中位置参量使用和命令执行状态码

  1. 位置参量
    位置参量是一组特殊的内置变量,通常被shell脚本用来从命令行接受参数,或被函数用来保存传递给它的参数。
    执行shell脚本时,用户可以通过命令行向脚本传递信息,跟在脚本名后面的用空格隔开的每个字符串都称为位置参量。
    位置参量有空格,需要用引号引起来!!!

    在脚本中使用这些参数时,需通过位置参量来引用。例如:$1表示第一个参数,$2表示第二个参数,以此类推.$9以后需要用花括号把数字括起来,如第10个位置参量以${10}的方式来访问。位置参量列表如下:

    下面展示一下位置参量的使用!!!

    [swpu@centos ~]$ mkdir script
    [swpu@centos ~]$ cd script/
    [swpu@centos script]$ ls
    [swpu@centos script]$ touch test.sh
    [swpu@centos script]$ vi test.sh
    
    在Notepad++中编写并保存
    

    然后,赋予脚本执行权限
    
       [swpu@centos script]$ chmod u+x test.sh [swpu@centos script]$ lltotal 4-rwxrw-r-- 1 swpu swpu 32 May 18 23:28 test.sh
    
    最后,执行脚本
    
       [swpu@centos script]$ sh test.sh Hello Shell
    
    在脚本中使用位置参数,
    

    [swpu@centos script]$ ./test.sh liujie liuyang tanhaotian
    Hello liujie - liuyang - tanhaotian !!!
    [swpu@centos script]$ sh test.sh liujie liuyang tanhaotian
    Hello liujie - liuyang - tanhaotian !!!
    
    继续在脚本中使用位置参数,
    

    [swpu@centos script]$ ./test.sh liujie liuyang tanhaotian
    Hello liujie - liuyang - tanhaotian !!!
    ======================
    ./test.sh
    [swpu@centos script]$ sh test.sh liujie liuyang tanhaotian
    Hello liujie - liuyang - tanhaotian !!!
    ======================
    test.sh
    [swpu@centos script]$ . test.sh liujie liuyang tanhaotian
    Hello liujie - liuyang - tanhaotian !!!
    ======================
    -bash
    
    我们可以发现,不同的执行脚本方式,所使用的脚本不同。
    增加显示位置参量个数的位置参量
    

    ```python
    [swpu@centos script]$ sh test.sh
    Hello  -  -  !!!
    ======================
    test.sh
    0
    [swpu@centos script]$ sh test.sh liujie liuyang tanhaotian
    Hello liujie - liuyang - tanhaotian !!!
    ======================
    test.sh
    3
    ```
    单字符串显示所有位置参量
    

    [swpu@centos script]$ sh test.sh liujie liuyang tanhaotian
    Hello liujie - liuyang - tanhaotian !!!
    ======================
    test.sh
    ======================
    3
    ======================
    liujie liuyang tanhaotian
    
    `#?`显示前面一个命令退出的状态码,0表示没有错误,其他任何值都表示有错误!
    
       [swpu@centos script]$ cd test-bash: cd: test: No such file or directory[swpu@centos script]$ echo $?1
    
    [swpu@centos script]$ sh test.sh
    Hello  -  -  !!!
    ======================
    test.sh
    ======================
    0
    ======================[swpu@centos script]$ echo $?
    0
    
  2. 命令执行状态码
    任何命令进行时都将返回一个退出状态。应用中通常会在关键步骤后判定#?,已确定关键步骤的执行是否正常。尤其调度系统里需要监控sh返回码。shell脚本的返回码取决于最后一个命令的返回码!

    退出状态0成功,无错误。
    退出状态大于0,失败,某处有错误。

    查看命令执行状态码命令:echo $?

4.Shell编程中数组、data和cal命令

4.1 数组

数组的定义:

[swpu@centos ~]$ arr=(zhangsan lisi wangwu)

引用数组中的变量:

[swpu@centos ~]$ echo ${arr[0]}
zhangsan

引用数组中的个数:

[swpu@centos ~]$ echo ${#arr[*]}
3

引用数组中所有元素:

[swpu@centos ~]$ echo ${arr[*]}
zhangsan lisi wangwu

为数组赋值:

[swpu@centos ~]$ arr[0]=liujie
[swpu@centos ~]$ echo ${arr[*]}
liujie lisi wangwu

4.2 date指令

查看Linux系统的时间:

[swpu@centos ~]$ date
Wed May 19 01:59:49 CST 2021

date指令的格式化输出功能:

[swpu@centos ~]$ date +%Y/%m/%d
2021/05/19
[swpu@centos ~]$ date +%H:%M
02:01
[swpu@centos ~]$ date +%H:%M:%S
02:02:50
[swpu@centos ~]$ date +%Y/%m/%dT%H:%M:%S
2021/05/19T02:04:03

[swpu@centos script]$ sh test.sh
2021/05/19T02:13:03
2021/05/18T02:13:03
2021/05/20T02:13:03

4.3 cal指令

查看当前月份的日历:

[swpu@centos script]$ calMay 2021
Su Mo Tu We Th Fr Sa12  3  4  5  6  7  89 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

查看某一年的日历:

[swpu@centos script]$ cal 20212021                               January               February                 March
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa1  2       1  2  3  4  5  6       1  2  3  4  5  63  4  5  6  7  8  9    7  8  9 10 11 12 13    7  8  9 10 11 12 13
10 11 12 13 14 15 16   14 15 16 17 18 19 20   14 15 16 17 18 19 20
17 18 19 20 21 22 23   21 22 23 24 25 26 27   21 22 23 24 25 26 27
24 25 26 27 28 29 30   28                     28 29 30 31
31April                   May                   June
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa1  2  3                      1          1  2  3  4  54  5  6  7  8  9 10    2  3  4  5  6  7  8    6  7  8  9 10 11 12
11 12 13 14 15 16 17    9 10 11 12 13 14 15   13 14 15 16 17 18 19
18 19 20 21 22 23 24   16 17 18 19 20 21 22   20 21 22 23 24 25 26
25 26 27 28 29 30      23 24 25 26 27 28 29   27 28 29 3030 31July                  August                September
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa1  2  3    1  2  3  4  5  6  7             1  2  3  44  5  6  7  8  9 10    8  9 10 11 12 13 14    5  6  7  8  9 10 11
11 12 13 14 15 16 17   15 16 17 18 19 20 21   12 13 14 15 16 17 18
18 19 20 21 22 23 24   22 23 24 25 26 27 28   19 20 21 22 23 24 25
25 26 27 28 29 30 31   29 30 31               26 27 28 29 30October               November               December
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa1  2       1  2  3  4  5  6             1  2  3  43  4  5  6  7  8  9    7  8  9 10 11 12 13    5  6  7  8  9 10 11
10 11 12 13 14 15 16   14 15 16 17 18 19 20   12 13 14 15 16 17 18
17 18 19 20 21 22 23   21 22 23 24 25 26 27   19 20 21 22 23 24 25
24 25 26 27 28 29 30   28 29 30               26 27 28 29 30 31
31

查看某一年某一月的日历:cal [month] [year]

[swpu@centos script]$ cal 5 2021May 2021
Su Mo Tu We Th Fr Sa12  3  4  5  6  7  89 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

5. Shell编程中判断表达式以及if语句使用

5.1 判断表达式

  1. 关于某个文件的【文件类型】判断,如test -e filename表示存在否

    -e:查看该文件是否存在?
    -f:查看该文件是否存在且为文件?
    -d:查看该文件是否存在且为目录?

  2. 关于文件的权限判断,如test -r filename表示是否具有可读权限

    -r:查看该文件是否存在且具有【可读】权限?
    -w:查看该文件是否存在且具有【可写】权限?
    -x:查看该文件是否存在且具有【可执行】权限?

  3. 判断两个整数之间的关系,例如test n1 -eq n2

    -eq:两数值相等
    -ne:两数值不等
    -gt:n1大于n2
    -lt:n1小于n2
    -ge:n1大于等于n2
    -le:n1小于等于n2

  4. 判断字符串数据

    test -z string:表示判断字符串是否为空?若string为空字符串,则为true
    test -n string:表示字符串是否为非空?若string为空字符串,则为false
    test str1=str2:判断str1是否等于str2,若相等,则回传true
    test str1 != str2判断str1是否不等于str2,若相等,则回传false

  5. 利用判断符号中括号来进行数据判断
    如果要在bash 的语法当中使用中括号作为 shell的判断式时,必须要注意中括号的两端需要有空格符来分隔

    [swpu@centos script]$ [ -z "$swpu" ];echo "===="
    ====
    

5.2 if判断语句

  1. 一重判断

    if[条件判断式];then当条件判断式成立时,可以进行的指令工作内容;
    fi<==将if反过来写,就成为fi啦!结束if之意!
    

    如果有多个条件要进行判断时,一种方法是将多个条件写入到一个中括号;另一个方法是用多个中括号,括号与括号之间以&&||来隔开。

    • &&代表AND
    • ||代表OR
  2. 多重、复杂条件判断
    在同一个数据的判断中,如果该数据需要进行多种不同的判断时,应该怎么作?

    # —个条件判断,分成功进行与失败进行(else)
    if [条件判断式]; then当条件判断式成立时,可以进行的指令工作内容方
    else当条件判断式不成立时,可以进行的指令工作内容;
    fi
    
    #多个条件判断(lif... elif ... elif ... else)分多种不同情况执行
    if[条件判断式一; then当条件判断式一成立时,可以进行的指令工作内容;
    elif[条件判断式二; then当条件判断式二成立时,可以进行的指令工作内容;
    else当条件判断式一与二均不成立时,可以进行的指令工作内容;
    fi
    

6.Shell编程中的for循环、while循环

6.1 for循环

for var in con1 con2 con3 ...
do程序段
done

以上面的例子来说,这个Svar的变量内容在循环工作时:
1.第一次循环时,$var的内容为con1 ;
2.第二次循环时,$var 的内容为con2 ;
3.第三次循环时,$var的内容为con3 ;
4…

执行这个脚本时,

[swpu@centos script]$ sh test.sh
liujie
liuyang
tanhaotian

[swpu@centos script]$ sh test.sh
liujie
liuyang
tanhaotian
------------------
45

6.2 while循环

  while的中文是当…时,所以,这种方式说的是当condition条件成立时,就进行循环,直到condition 的条件不成立才停止的意思。

while [ condition ]  <==中括号内的状态就是判断式
do  <==do是循环的开始!程序段落
done    <==done是循环的结束

下面脚本可以实现:从文件或命令中逐行读取

cat filename | while read line
doecho $line
done

如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论或者私信!


Linux基础—5.Shell基础编程【有图有真相】相关推荐

  1. Linux基础篇--shell脚本编程基础

    Linux基础篇–shell脚本编程基础 本章内容概要  编程基础  脚本基本格式  变量  运算  条件测试  配置用户环境 7.1 编程基础 程序:指令+数据 程序编程风格:   过程式:以指令为 ...

  2. linux脚本除号,Shell脚本编程(上)

    Shell脚本编程基础 Shell 脚本基础:包含一些命令或声明并符合一定格式的文本文件 Shell 脚本用途: 1. 自动化常用命令 2. 执行系统管理和故障排除 3. 创建简单的应用程序 4. 处 ...

  3. Linux基础篇–shell脚本编程基础

    本章内容概要  编程基础  脚本基本格式  变量  运算  条件测试  配置用户环境 7.1 编程基础 程序:指令+数据 程序编程风格:   过程式:以指令为中心,数据服务于指令   对象式:以数据为 ...

  4. linux学习之shell基础篇

    1.shell简介 shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层.当从shell或其他程序向Linux传递命令时,内核会做出相 ...

  5. 『面试知识集锦100篇』2.linux篇丨shell基础命令全集,我奶奶的速查手册!!

    目录 第一部分:基础知识 一.Linux 文件基本属性 二.Linux 磁盘管理 2.1 df命令 2.2 du命令 2.3 磁盘检验

  6. Linux基础、Shell基础语法等

    常用指令 sed 删除redis.conf文件中的空行和注释行 sed -i '/^$/ d' redis.conf sed -i '/^#/ d' redis.conf 文件目录类 df -Th 查 ...

  7. Linux系统配置(shell基础)

    目录 前言 一.编写shell 1.格式和运行 2.操作符号 3.当前变量 4.全局变量 5.永久变量 6.自定义变量 7.加法脚本 8.整数运算 9.系统变量 10.位置参数与预定义变量 11.打包 ...

  8. linux的基础知识——shell基础

    文章目录 1.什么是shell? 2.shell历史 3.编写一个shell脚本 3.1创建一个`.sh`文件 3.2 编写一个简单的脚本内容 3.3 执行 4.shell 数据类型和变量 4.1 数 ...

  9. linux笔记:shell基础-bash基本功能

    历史命令的调用: 命令和文件补全(如果当前有多个可选的补全,则按2次tab键,可以列出所有的可选项): 命令别名: 让别名永久生效: 删除别名: bash常用快捷键: 标准输入输出: 输出重定向: 输 ...

  10. Linux再学--shell基础5正则表达式和文本搜索

    文章目录 1. 元字符 2. 扩展元字符 3. 文件的查找命令find 4. 文本内容的过滤 grep 1. 元字符 当我们需要使用字符去匹配一个字符串的时候,除了使用一个个字符去字符串中一对一的比对 ...

最新文章

  1. 直观地理解车辆的运动控制
  2. Android 开发实用小技巧
  3. 【POJ 2503】Babelfish(水题)stl map存取即可
  4. oracle with 查询,oracle with 语句实现递归查询
  5. 电脑技巧:电脑几种常见的系统故障解答
  6. python 生成对称矩阵_对称矩阵| 使用Python的线性代数
  7. C++关键字--volatile
  8. ES6_let和const_note
  9. c语言文件分类二进制,C语言实现文件版(二进制文件版)通讯录
  10. 如何注册苹果开发者账号
  11. 【Java】编程思想汇总ing
  12. C#生成GS1码制二维码
  13. 【线性代数】范德蒙行列式
  14. windows server 2008 进行多域名指向同一个ip
  15. halcon图片上区域灰度值区间放大,可提高对比度
  16. 高德视觉技术中心招聘计算机视觉研发(社招/校招/实习岗位)
  17. 一起学习log4cxx
  18. kubeadm,kubevip,containerd部署高可用的kubernetes集群
  19. 【C++】DFS——计算土地上水洼的数量
  20. iOS - 内存管理

热门文章

  1. linux中文显示和输入
  2. Matlab代码生成任意边长等间距正六边形采样点
  3. 二极管(一):反向恢复时间
  4. jquery 点击显示更多
  5. Spring 之autowired
  6. C# 调用C/C++动态链接库,结构体中的char*类型
  7. STM32库函数 断言机制 宏定义assert_param(expr)和assert_failed的使用方法
  8. Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、...
  9. selenium python grid
  10. cocos2d-x 3.2 DrawNode 绘图API