一、背景

到新公司之后,发现好多地方需要使用shell来编写一些简单的程序来提升自己的工作效率,因此专门B站上查看视频(尚硅谷的视频),在这里学习总结下shell编程。

二、shell概述

shell是一个命令行解释器,它接收应用程序或用户的命令,然后调用操作系统内核。

shell还是一个相当强大的编程语言,易编写,易调试,灵活性强。

三、shell入门

1.脚本格式

脚本格式以#!/bin/bash开头(指向解释器)

2.第一个shell脚本,helloworld.sh,输出helloworld!


3.执行方式

方式一:sh 或 bash + 相对或绝对的文件路径(不需要 +x)
方式二:直接输入脚本的相对或绝对路径(需授可执行权限 +x)
方式三:在脚本的路径前面,使用一个 . 或一个source (这种方式不同于以上2种,以上两种运行时会嵌套子shell,这个不会嵌套,就在本环境运行,开子shell与不开子shell的区别在于,环境变量的继承关系,如在子shell中设置的当前变量,父shell中是不可见的 )

4.变量

- 4.1系统预定义变量

a.常用的系统变量(这里大多数都是写全局的环境变量)
$HOME、$PATH、$SHELL等、$PWD

- 4.2 自定义变量

a.基本语法:
(1)定义变量:变量名=变量值, 注意:=前后不能有空格
(2)撤销变量:unset 变量名
(3)申明静态变量:readonly 变量,注意:不能unset
b.变量定义的规则:
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写
(2)等号两侧不能有空格
(3)在bash中,默认变量都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或者单引号给括起来。
c.案例实操:
(1)下图中设置的变量时局部变量(比如,在当前环境设置后,在子bash中就访问不到)

(2)设置为全局变量
步骤1:先设置局部变量
步骤2:export 变量 注:意思就是把父shell中的变量导出变成一个全局变量
注意:子bash中更改的的全局变量,只在子bash中有效,退出子bash后无效

- 4.3特殊变量

a.位置参数:$n:
(1)基本语法:
$n(功能描述:n为数字,$0代表脚本名称,$1-$9代表一到九个参数,十以上的要用大括号包含${10})
(2)实操案例

b.参数个数:$#
(1)基本语法:
$#(获取所有输入参数的个数,常用于循环,判断参数个数是否正确以及加强脚本的健壮性)
(2)实操案例

c.获取参数:$* 和 $@
(1)基本语法
$* :这个变量代表命令行中所有的参数, $*把所有的看成一个整体
$@:这个变量代表命令行中所有的参数,不过$@把每个参数区分对待
(2)案例实操

  • d.返回状态:$?
    (1)基本语法
    $?:最后一次执行命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
    (2)案例实操

5.运算符

(1)基本语法
$((运算式)) 或 $[运算式]
(2)案例实操

6.条件判断

(1)基本语法
a.test condition
b.[ condition ] 注意:condition前后要有空格
注意:1.条件非空返回true,否则返回false;2.记得加空格,不然程序会认为是一个值

c.常用判断条件
(1)两个整数之间比较

  • -eq:等于(equal)
  • -ne:不等于(not equal)
  • -lt:小于(less than)
  • -le:小于等于(less equal)
  • -gt:大于(greater than)
  • -ge:大于等于(greater equal)
    注:如果四字符串之间的比较,用"=“判断相等,用”!="判断不等
    (2)按照文件权限进行判断
  • -r:有可读权限(read)
  • -w:有可写权限(write)
  • -x:有可执行权限(execute)
    (3)按照文件的类型进行判断
  • -e:文件存在(existence)
  • -f:文件存在且是一个常规的文件(file)
  • -d:文件存在且是一个目录(directory)
    (4)多条件判断
  • &&:表示前一个命令执行成功时,才执行后一条命令
  • ||:表示上一条命令失败后,才执行下一条命令
  • -a:即all同&&,但是&&不能在 [] 中使用,示例:[ $age -gt 18 -a $age -lt 35 ]
  • -o:即or同||,但是||不能在 [] 中使用,示例:[ $age -gt 18 -o $age -lt 35 ]

[ … ] && … || … 其实就是if…else…语句了

d.案例实操



7.流程控制(重点)

- 7.1、if判断(双分支的逻辑结构,二叉树)

a.基本语法
(1)单分支

if [ 条件判断式 ];then  #分号表示一行出现2步命令的实现程序
fi
#或者
if [ 条件判断式 ]
then程序
fi

(2)多分支

if [ 条件判断式 ]
then程序
elif [ 条件判断式 ]
then程序
else程序
fi

b.案例实操

- 7.2、case语句(多分支的逻辑结构,多叉树)

a.基本语法
case $变量名 in
“值1”)
如果这个值等于值1,则执行程序1
;;
“值2”)
如果这个值等于值2,则执行程序2
;;
…省略其它分支…
)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
(1)case行尾必须为单词"in",每个模式必须以右括号")“结束。
(2)双分号”;;“表示命令序列结束,相当于java中的break
(3)最后的”
"表示默认模式,相当于java中的default
b.案例实操

- 7.3、for循环

a.基本语法1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done

b.案例实操1
注意:双小括号(( ))中就可以直接使用数学中的运算表达式,如:<=

c.基本语法2
for 变量 in 值1 值2 值3
do
程序
done
d.操作实例2

增强for循环

- 7.4、while循环(条件判断循环)

a.基本语法
while [ 条件判断式 ]
do
程序
done.
b.案例实操


另一种写法:使用内嵌函数let

#!/bin/basha=1
while [ $a -le $1 ]; do# sum=$[$sum+$a]# a=$[$a+1]# 使用内嵌命令let,实现类似其它语言中的写法let sum+=$alet a++
doneecho "$sum"

8.read读取控制台输入

a.基本语法
read (选项) (参数)
选项:

  • -p:指定读取值时的提示符
  • -t:读取超时时间(超时退出)
    参数:
  • 变量:指定读取值的变量名
    b.按理实操

9.函数

- 9.1、系统函数

- 9.1.1、basename

(1)基本语法
basename [string/pathname] [suffix] (功能描述:basename命令会删掉所有前缀,包括最后一个('/'字符),然后将字符显示出来)
basename可以理解为获取路径里的文件名称
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
(2)案例实操
调用系统函数:$(函数名 参数)

- 9.1.2、dirname

(1)基本语法

(2)案例实操

- 9.2、自定义函数

a.基本语法
[function] funname[()]
{
Actiion;
[return int;]
}
b.经验技巧

  1. 必须在调用之前先申明函数,先申明函数,shell脚本是逐行运行(解释性语言)。不会像其它语言一样先去编译。
  2. 函数返回值,只能通过$?系统变量获得,可以显示加return返回,如果不加,将以最后一条命令运行结果作为返回值。return后跟数值0-255

c.案例实操

10.综合应用案例-归档文件

#!/bin/bash# 首先,判断参数的个数是1
if [[ $# -ne 1 ]]; thenecho "参数个数错误,应该输入一个参数,作为归档目录名。"exit
fi # 从参数中获取目录名称
if [[ -d $1 ]]; thenecho
elseecho "目录不存在!"echoexit
fiDIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1);pwd)# 获取当前日期
DATE=$(date +%y%m%d)# 定义生成文件的归档名称
FILE=test_${DIR_NAME}_$DATE.tar.gz
DEST=/home/jupiter/dongshuai/$FILEecho "开始归档。。"
echotar -czf $DEST $DIR_PATH/$DIR_NAMEif [[ $? -eq 0 ]]; thenecho echo "归档成功!"echoexit
elseecho "归档出现问题!"echo
fi


然后使用crontab可以定制执行

shell编程入门(一天掌握shell编程)相关推荐

  1. shell编程入门 linux解释器原理,Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对.doc...

    Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对 Shell编程入门:Linux解释器原理详细介绍使用Shell进行工作的人们对Unix/Linux下的Shell编程都很 ...

  2. python单片机编程入门先学什么_编程入门必看:带你零基础了解编程和编程语言,入门应该学什么?...

    编程入门 什么是编程 我们通过有固定格式和固定词汇的"语言"来控制他人,让他人为我们做事情.语言有很多种,包括汉语.英语.法语.韩语等,虽然他们的词汇和格式都不一样,但是可以达到同 ...

  3. BIO,Socket网络编程入门代码示例,NIO网络编程入门代码示例,AIO 网络编程

    BIO,Socket网络编程入门代码示例 1.BIO服务器端程序 package cn.itcast.bio;import java.io.InputStream; import java.io.Ou ...

  4. python编程入门经典-总算理解python编程入门经典教程

    为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...

  5. python机械编程入门先学什么_编程入门先学什么

    很多同学在后台问我,编程入门学什么? 关于这个问题真不是一两句话就可以解释清楚的,所以,我写这篇文章. 希望准备学习编程的朋友能有所收获. 1.学什么好呢? 其实做这个还是挺害怕的 因为我在朋友圈发问 ...

  6. 黑马程序员 python快速编程入门课后答案_Python快速编程入门课后程序题答案

    前言 本文只是简单的整理了一下课后习题的编程题,具体的填空.选择.判断可以见:Python快速编程入门课后习题答案 第一章 1.编写一个Python程序,输出如下图效果. ++++++++++ +  ...

  7. python编程入门到实践pdf,python编程入门课 视频

    初学者学Python编程如何快速入门? 谷歌人工智能写作项目:小发猫 初学python入门都需要具备那些条件? Python相对比较简单,零基础也能学typescript在npm安装后检测不到.系统学 ...

  8. python快速编程入门课后简答题答案-编程python入门 编程python入门课后习题

    编程python入门 编程python入门课后习题 米粒妈咪课堂小编整理了填空.选择.判断等一些课后习题答案,供大家参考学习. 第一章 一.填空题 Python是一种面向对象的高级语言. Python ...

  9. python语言编程入门先学什么-自学编程入门,先学什么语言好?

    强烈推荐Python.其实这个问题在入门阶段一直是争议十分大的问题,n多语言,n多推荐,到最后搞到新手一会听说这种语言适合新手,于是学习这种语言,一会又有人说xx语言是垃圾.弱爆了,学了也没用,之类的 ...

  10. python编程入门必备知识-Python快速编程入门,打牢基础必须知道的11个知识点

    Python被誉为全世界高效的编程语言,同时也被称作是"胶水语言",那它为何能如此受欢迎,下面我们就来说说Python入门学习的必备11个知识点,也就是它为何能够如此受欢迎的原因. ...

最新文章

  1. 面部表情自动识别技术及在游戏行业的应用
  2. BCH开发团队BU为什么选择让矿工投票?
  3. 平衡二叉树的构造_LeetCode 题解 | 110.平衡二叉树
  4. centos7 docker 安装 otter 注意事项
  5. 计算机网络职称考试试题,职称计算机考试网络综合试题
  6. 分布式系统——zabbix监控tomcat
  7. Plus from Picture
  8. 何时才有Email发布功能
  9. 嵌入式开发中关键字_IO 和 volatile的用法
  10. SQL Server 2008 事件探查器(SQL SERVER Profiler)
  11. 魅族MX4关闭系统升级Flyme6提示
  12. SQLite 插入大量数据慢的解决方法
  13. html如何动态添加样式表,JavaScript动态插入CSS的方法
  14. [Win10] 解决 Office 安装后图标空白的问题
  15. 8类网线利弊_浅析网线8芯线各自的作用
  16. Method threw ‘java.lang.IllegalStateException‘ exception. Cannot evaluate org.apache.hadoop.mapreduc
  17. 比较 SVFI-RIFE 和 DAIN-APP 补针效果 施工中 ~
  18. 51单片机两只老虎 c语言,基于51单片机做音乐盒(两只老虎)
  19. 坚石加密锁应用方法技巧简介
  20. html中表格布局还是div布局,表格布局和css div布局

热门文章

  1. 云原生CI/CD:Tekton/pipelin之pipeline概念篇
  2. 指挥计算机工作的程序集,主互操作程序集(PIA)是否要求在计算机中安装Microsoft Office才能工作...
  3. 为什么Word2007在编辑文字鼠标点击一下整篇文字的背景就立刻变为灰色的
  4. C++:错误:ISO C++ forbids in-class initialization of non-const static member ‘A::b’
  5. 【转载】【《Real-Time Rendering 3rd》 提炼总结】(四) 第五章 · 图形渲染与视觉外观 The Visual Appearance
  6. MIT 6.828 学习笔记4 Lab2实验报告
  7. 【半导体器件数值模拟之仓田卫篇】
  8. 用photoshop制作电子版签名图片
  9. Oracle:根据身份证号码查询年龄最大的人
  10. 如何将一个对象中的List对象添加为子集,且父结构不存在重复数据