Linux基础—5.Shell基础编程【有图有真相】
文章目录
- 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程序?
- 以文件形式存放批量的Linux命令集合,该文件能够被Shell解释执行,这种文件就是Shell脚本程序。
- 通常由一段Linux命令、Shell命令、控制语句以及注释语句构成
- Shell脚本的编写。
Shell脚本是纯文本文件,可以使用任何文本编辑器编写Shell脚本,通常是以.sh 作为后缀名。
2. Shell编程中变量的声明、引用及作用域
Shell程序的第一行:用来指定用哪个程序来编译和执行脚本。
#!/bin/bash
或者#!/bin/sh
,sh是bash程序的软连接。这里的#不是注释,是特殊命令。变量命名
变量名必须以字母或下划线开头,后面可以跟字母、数字或下划线。任何其它字符都标志变量名的结束。变量名关于大小写敏感。通过$符号来引用变量名。
变量类型
根据变量的作用域,变量可以分为本地变量和环境变量。而环境变量又分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中的所有用户进程中可用,通常也称为全局变量。变量赋值
等号两边不能有空格
如果要给变量赋空值,可以在等号后面跟一个换行符显示变量的值的命令:
echo $variable
或者echo ${variable}
清除变量的值的命令:
unset variable
显示当前用户的所有变量命令:
set
环境变量称为全局变量,按照惯例,需要大写:
export LANG
注意:可被所有的Shell环境下访问;
如果父Shell进程产生了子Shell进程,则环境变量可被“继承”并复制
3.Shell编程中位置参量使用和命令执行状态码
位置参量
位置参量是一组特殊的内置变量,通常被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
命令执行状态码
任何命令进行时都将返回一个退出状态。应用中通常会在关键步骤后判定#?
,已确定关键步骤的执行是否正常。尤其调度系统里需要监控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 判断表达式
关于某个文件的【文件类型】判断,如
test -e filename
表示存在否-e
:查看该文件是否存在?
-f
:查看该文件是否存在且为文件?
-d
:查看该文件是否存在且为目录?关于文件的权限判断,如
test -r filename
表示是否具有可读权限-r
:查看该文件是否存在且具有【可读】权限?
-w
:查看该文件是否存在且具有【可写】权限?
-x
:查看该文件是否存在且具有【可执行】权限?判断两个整数之间的关系,例如
test n1 -eq n2
-eq
:两数值相等
-ne
:两数值不等
-gt
:n1大于n2
-lt
:n1小于n2
-ge
:n1大于等于n2
-le
:n1小于等于n2判断字符串数据
test -z string
:表示判断字符串是否为空?若string为空字符串,则为true
test -n string
:表示字符串是否为非空?若string为空字符串,则为false
test str1=str2
:判断str1是否等于str2,若相等,则回传true
test str1 != str2
判断str1是否不等于str2,若相等,则回传false利用判断符号中括号来进行数据判断
如果要在bash 的语法当中使用中括号作为 shell的判断式时,必须要注意中括号的两端需要有空格符来分隔[swpu@centos script]$ [ -z "$swpu" ];echo "====" ====
5.2 if判断语句
一重判断
if[条件判断式];then当条件判断式成立时,可以进行的指令工作内容; fi<==将if反过来写,就成为fi啦!结束if之意!
如果有多个条件要进行判断时,一种方法是将多个条件写入到一个中括号;另一个方法是用多个中括号,括号与括号之间以
&&
或||
来隔开。&&
代表AND||
代表OR
多重、复杂条件判断
在同一个数据的判断中,如果该数据需要进行多种不同的判断时,应该怎么作?# —个条件判断,分成功进行与失败进行(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基础编程【有图有真相】相关推荐
- Linux基础篇--shell脚本编程基础
Linux基础篇–shell脚本编程基础 本章内容概要 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 7.1 编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为 ...
- linux脚本除号,Shell脚本编程(上)
Shell脚本编程基础 Shell 脚本基础:包含一些命令或声明并符合一定格式的文本文件 Shell 脚本用途: 1. 自动化常用命令 2. 执行系统管理和故障排除 3. 创建简单的应用程序 4. 处 ...
- Linux基础篇–shell脚本编程基础
本章内容概要 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 7.1 编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为 ...
- linux学习之shell基础篇
1.shell简介 shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层.当从shell或其他程序向Linux传递命令时,内核会做出相 ...
- 『面试知识集锦100篇』2.linux篇丨shell基础命令全集,我奶奶的速查手册!!
目录 第一部分:基础知识 一.Linux 文件基本属性 二.Linux 磁盘管理 2.1 df命令 2.2 du命令 2.3 磁盘检验
- Linux基础、Shell基础语法等
常用指令 sed 删除redis.conf文件中的空行和注释行 sed -i '/^$/ d' redis.conf sed -i '/^#/ d' redis.conf 文件目录类 df -Th 查 ...
- Linux系统配置(shell基础)
目录 前言 一.编写shell 1.格式和运行 2.操作符号 3.当前变量 4.全局变量 5.永久变量 6.自定义变量 7.加法脚本 8.整数运算 9.系统变量 10.位置参数与预定义变量 11.打包 ...
- linux的基础知识——shell基础
文章目录 1.什么是shell? 2.shell历史 3.编写一个shell脚本 3.1创建一个`.sh`文件 3.2 编写一个简单的脚本内容 3.3 执行 4.shell 数据类型和变量 4.1 数 ...
- linux笔记:shell基础-bash基本功能
历史命令的调用: 命令和文件补全(如果当前有多个可选的补全,则按2次tab键,可以列出所有的可选项): 命令别名: 让别名永久生效: 删除别名: bash常用快捷键: 标准输入输出: 输出重定向: 输 ...
- Linux再学--shell基础5正则表达式和文本搜索
文章目录 1. 元字符 2. 扩展元字符 3. 文件的查找命令find 4. 文本内容的过滤 grep 1. 元字符 当我们需要使用字符去匹配一个字符串的时候,除了使用一个个字符去字符串中一对一的比对 ...
最新文章
- 直观地理解车辆的运动控制
- Android 开发实用小技巧
- 【POJ 2503】Babelfish(水题)stl map存取即可
- oracle with 查询,oracle with 语句实现递归查询
- 电脑技巧:电脑几种常见的系统故障解答
- python 生成对称矩阵_对称矩阵| 使用Python的线性代数
- C++关键字--volatile
- ES6_let和const_note
- c语言文件分类二进制,C语言实现文件版(二进制文件版)通讯录
- 如何注册苹果开发者账号
- 【Java】编程思想汇总ing
- C#生成GS1码制二维码
- 【线性代数】范德蒙行列式
- windows server 2008 进行多域名指向同一个ip
- halcon图片上区域灰度值区间放大,可提高对比度
- 高德视觉技术中心招聘计算机视觉研发(社招/校招/实习岗位)
- 一起学习log4cxx
- kubeadm,kubevip,containerd部署高可用的kubernetes集群
- 【C++】DFS——计算土地上水洼的数量
- iOS - 内存管理
热门文章
- linux中文显示和输入
- Matlab代码生成任意边长等间距正六边形采样点
- 二极管(一):反向恢复时间
- jquery 点击显示更多
- Spring 之autowired
- C# 调用C/C++动态链接库,结构体中的char*类型
- STM32库函数 断言机制 宏定义assert_param(expr)和assert_failed的使用方法
- Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、...
- selenium python grid
- cocos2d-x 3.2 DrawNode 绘图API