一、什么是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. 【Python】pip国内安装源和yum恢复

    豆瓣安装源 pip install packages -i http://pypi.doubanio.com/simple --upgrade --trusted-host pypi.doubanio ...

  2. leetcode234

    /** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNo ...

  3. jmeter 实现 mysql 存储过程

    Callable Statement:存储过程语句.可以在一个脚本里实现增删改查. 实现方法: 1)首先创建一个存储过程 2)然后执行这个存储过程

  4. 【ESP8266】、ESP8266通讯使用的AT指令

    一.AT指令介绍 AT(Attention), AT指令一般应用于终端设备和PC应用之间建立连接.通过AT指令来控制. 二.常用AT指令 AT指令主要分为: 基础AT指令,WIFI功能AT指令,TCP ...

  5. Python中*和**的作用(课堂小结)

    以前自学没注意过参数的传导中*和**的用法,这次趁着上课了解了一下,顺便写个随笔记一下. 1.打包用法 在参数传导中*args是不定长参数,传入的参数是不限制个数的,比如 def bdc(*args) ...

  6. oracle 连接字符串的问题

    未指定的错误,发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息.数据类型不被支持. 原因是你用的ADO   for   ORACLE的驱动是微软的Microsoft OLE DB ...

  7. Java 运行时常量池

    运行时常量池是方法区的一部分.class中除了有类的版本,字段,方法,接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放在方法区的运行时常量池 ...

  8. Pandas数据的去重,替换和离散化,异常值的检测

    数据转换 移除重复数据 import pandas as pd import numpy as np from pandas import Series data = pd.DataFrame( {' ...

  9. f5 主备模式切换

    f5 主备模式  主机down自动切换到备  原主机重新启动,自动切换到原主机

  10. 688. Knight Probability in Chessboard棋子留在棋盘上的概率

    [抄题]: On an NxN chessboard, a knight starts at the r-th row and c-th column and attempts to make exa ...