一、什么是shell:

shell解释:引用别人的话说:“Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。”

  简而言之,shell是命令解释器之外的一种编程语言。

shell可以做什么:批处理、自动化管理、监控管理、日志数据处理、自动数据备份等等。

二、组成部分和执行方式

1、shell脚本组成部分

1)注释:#开头

2)命令:shell基本语法

3)变量:shell支持字符串变量和整数变量。

4)结构控制语句:流程控制语句

2、执行方式

两种执行方式

1)sh shelltest

2)./shelltest

说明:两种执行方式的权限控制不一样。

三、语法说明

1、注释、指定执行方式、退出

  • 注释等说明信息,要以#开头。
  • 脚本的第一行调用时表明基于bash的方式执行:#!/bin/bash(说明:如果系统默认是bash执行,不写也行)
  • 退出时最好写上:exit 0

示例:

#!/bin/bash
# 我是注释 :-e特殊字符(\a、\n)转义
echo -e "Hello World!\a\n"
exit 

2、变量和变量的计算

定义变量:name=aa

说明:

  • name:变量名,变量名用小写字母命名
  • =:赋值符号,两边绝对不能有空格
  • aa:可以为字符串,可以为数值

引用变量:$name(表示引用name的值)

变量的数值计算:

语法:需要使用双层小括号括起来,模运算:% 幂运算:**

示例:实现a + b

#!/bin/bash
a=
b=
echo $(($a+$b))
+-*)) 

./shelltest执行,结果为:

30
80

字符串操作:

${#string} : 计算长度

${string:position} : 从position开始截取

${string:position:length} : 从position开始截取length长度

${string#substring} : 删除开始的字符串

示例:

${string#I*.} : 删除从I到.的所有字符(最短匹配)

${string##I*} : 删除开始I到.所有字符(最长匹配)

3、语句判断

1)判断语句test命令

可以使用:man test查看test的语法说明。

以下为test的几个基本使用:

-f:文件是否存在

-d:目录是否存在

-r:文件是否有读权限

-w:文件是否有写权限

-x:文件是否有执行权限

示例:

#!/bin/bash
filename=/home/zhangsan
test -f $filename && echo 'exist' || 'not exist'

通过./shelltest执行,会显示'not exist'

2)[]判断

注意:

1)中括号中必须用空格隔开

2)中括号中的变量最好以双引号括起来

3)中括号中的常数,最好以单引号括起来

eg:
[ "$a" == "$b" ]&&echo 'yes' || echo 'no'
[ '12' == '10' ]&&echo 'yes' || echo 'no'

4、条件分支

三种条件分支:单分支、双分支、多分支

1)单分支判断

语法:

if[];then
echo 'aa'
fi

示例:

#!/bin/bash
filename=/home/asdf
if[ test -f $filename ];then
  echo 'aa'
fi

2)双分支判断

#!/bin/bash
if[];then
  echo 'aa'
else
  echo 'bb'
fi

3)多分支判断

多分支判断有两种方式:if elif else方式、case in方式。

第一种:if elif else方式

示例:

#!/bin/bash
if[];then
  echo 'aa'
elif
  echo 'bb'
elif
  echo 'cc'
fi

第二种:case in方式

语法:

case $name in
);;
echo 'aa'
esac

多分支示例:

从终端接收一个输入参数,然后进行条件判断。(read:接收用户输入)

#!/bin/bash
echo '输入一个值:'
read number
 ];then
  '
 ];then
  '
else
  echo '错误'
fi

示例,查看硬件信息脚本:

#!/bin/bash
echo '输入一个值:'
read hd
if[ $hd == cpu ];then
  cat /proc/cpuinfo
elif[ $hd == mem ];then
  cat /proc/meminfo
elif[ $hd == hard ];then
  df -h
else
  echo '错误'
fi

case in方式的示例:

#!/bin/bash
echo '输入一个值:'
read number
case $number in
)
  ';;
)
  ';;
*)
  echo '错误';;
esac

5、循环语句

循环语句有三种方式:while do循环、until do循环、for循环

说明:[]中要使用以下转义符号;(())不需要转义。shell推荐使用[]。

[] : -eq -ne -gt -ge -lt -le

(()): == != > >= < <=

1)while do循环

说明:示例中[ $i -eq 5 ] 等价于 (($i==5))。

#!/bin/bash
i=
 ];do
  echo $i;
  ((i--));
done;

2)until do循环:直到..才执行

#!/bin/bash
i=
));do
  echo $i;
  ((i--));
done;

3)for循环

#!/bin/bash
;i<=;i++));do
  echo $i
done;

6、函数(方法)

参考示例,文件名为shelltest

#!/bin/bash
function print(){
  echo '$1'
}

 in
"one")
  print ;;
"two")
  print ;;
*)
  print '错误';;
esac

执行的时候可以直接通过控制台直接传参:

$ ./shelltest one

以下执行结果为:2

$ ./shelltest two

以上为shell脚本的基本使用,熟练使用后,再结合linux其他基本命令扩展一下,就能基本掌握shell脚本编程了。

shell脚本基础教程的更多相关文章

  1. 【转贴】bat脚本基础教程

    bat脚本基础教程 https://www.cnblogs.com/linyfeng/p/8072002.html 自己动手太少了. bat脚本就是DOS批处理脚本,就是将一系列DOS命令按照一定顺序 ...

  2. 详细介绍Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  3. Shell脚本系列教程二: 开始Shell编程

    Shell脚本系列教程二: 开始Shell编程 2.1 如何写shell script? (1) 最常用的是使用vi或者mcedit来编写shell脚本, 但是你也可以使用任何你喜欢的编辑器; (2) ...

  4. shell脚本-基础

    shell脚本-基础 编程基础 程序是指令+ 数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell 程序提供了编程能力,解释执行. 计算运行二进 ...

  5. Linux shell脚本基础学习详细介绍(完整版)二

    详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...

  6. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  7. Shell脚本基础学习

    Shell脚本基础学习 当你在类Unix机器上编程时, 或者参与大型项目如k8s等, 某些框架和软件的安装都是使用shell脚本写的. 学会基本的shell脚本使用, 让你走上人生巅峰, 才怪. 学会 ...

  8. 什么是Shell?Shell脚本基础知识详细介绍

    这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...

  9. Shell脚本深入教程(1):快速入门

    Shell脚本基础入门 Bash注释 Bash只支持单行注释,使用#开头的都被当作注释语句: # 整行注释 echo hello world # 行尾注释 通过Bash的一些特性,可以取巧实现多行注释 ...

随机推荐

  1. Mac 日常使用tips

    20180725: windows标准的键盘连接了mac如何映射键盘?最大的好处是可以向后删除,还可以一键PageUP, PageDown ref: https://support.apple.com ...

  2. !!!常用CSS代码块

    图片排满一行.左右两端无间隙. <style type="text/css"> .img_abc{float:left;width:30%;margin-left:5% ...

  3. flex兼容性之Webpack3+postcss+sass+css

    1:⚠️⚠️ 首先安装依赖 npm install --save-dev webpack style-loader css-loader postcss-loader sass-loader auto ...

  4. Azkaban安装及分布式部署(multiple-executor)

    参考文章:https://blog.csdn.net/weixin_35852328/article/details/79327996 官网:https://azkaban.readthedocs.i ...

  5. leetcode76

    class Solution: def minWindow(self, s: str, t: str) -> str: n = len(s) if n==0: return "&quo ...

  6. 【FZSZ2017暑假提高组Day1】华容道游戏

    [问题描述] 华容道是一种有趣的滑块游戏,大概是下面这个样子的. 游戏局面由一个2*2的曹操滑块,五个2*1的蜀将滑块(横竖是不定的).四个1*1的小兵滑块以及两个空的位置构成,玩家需要利用空的位子移 ...

  7. layer.js 中弹框显示不全的问题

    在使用 layer.js 做弹框的时候,遇到在浏览器缩小时,弹框显示不全的问题,如下: 这是不行的,因为我们有的时候想缩小浏览器视窗,但是一旦缩小到一定程度,就会把弹窗的关闭按钮遮住一部分,并且主体弹 ...

  8. 规模预算 之 FP法(作成中)

    五大要素 「外部入力」「外部出力」「内部論理ファイル」 「外部インタフェースファイル」「外部照会」 优点 1) 開発初期段階での概算が可能 2) エンドユーザが認識可能な計測法である(ユーザ目線での機 ...

  9. week06 12 我们准备数据 前端调用rpc 前后端联调一下

    用postman发送请求 出现一个问题 我在return结果前 要将数据转换成字典 所以我们用json.dumps()后再json.load()回来 这样就避免了这个问题 因为数据结构的数据 比如li ...

  10. 为docker私有registry配置nginx反向代理

    公司的Docker私有registry已经搭建好了,用官方的registry image很容易就搭建好了.现在就是要用nginx的反向代理把它放出来,以便在外网可以访问. 我的上一篇blog 讲了如何 ...