一、什么是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. Maven私服(Nexus)启动创建Windows服务

    sc create lutao-maven-nexus binpath= D:\maven-server\nexus--\bin\nexus.exe type= own start= auto dis ...

  2. UNITY 打包时提示sdk tools 或 sdk build tools版本低时可以直接点update 按钮进行更新

    如题.如果不更新,而选择 : use newest version installed ,打包到结尾时可能会报错,莫名其妙的java错误 而且,SDK一旦被更新后,其所在目录的 SDK MANAGER ...

  3. git从远程分支clone项目到本地,切换分支命令,其他常用命令

    1.在git命令窗口输入git clone git@139.129.217.217:sg/sgsq_cms.git 回车,即可克隆远程项目到本地.红色字体为远程分支的SSHkey,可以登录到gitli ...

  4. springboot @scheduled 并发

    本文介绍如何使用springboot的sheduled实现任务的定时调度,并将调度的任务实现为并发的方式. 1.定时调度配置scheduled 1)注册定时任务 package com.xiaoju. ...

  5. DJango 基础 (4)

    Django模板标签 知识点: 基本概念 常用标签 模板标签例子 模板继承与应用 注释标签 模板标签 标签在渲染的过程中提供任意的逻辑. 这个定义是刻意模糊的. 例如,一个标签可以输出内容,作为控制结 ...

  6. CentOS 特殊变量($0、$1、$2、 $?、 $# 、$@、 $*)

    名称 说明 $0 脚本名称 $1-9 脚本执行时的参数1到参数9 $? 脚本的返回值 $# 脚本执行时,输入的参数的个数 $@ 输入的参数的具体内容(将输入的参数作为一个多个对象,即是所有参数的一个列 ...

  7. Centos7安装部署Zabbix3.4

    1.关闭selinux和firewall 1.1检测selinux是否关闭 [root@localhost ~]# getenforce  Disabled                       ...

  8. Eclipse 创建Android 模拟器失败:no cpu/abi system image available for this target

    (从网上搜了一个使用Android 4.4 API 20编译的图片) 这是因为SDK中没有模拟器使用的操作系统镜像. 如果项目使用API 19编译,则SDK中的system-images文件夹下,需要 ...

  9. 445. Add Two Numbers II 链表中的数字求和

    [抄题]: You are given two non-empty linked lists representing two non-negative integers. The most sign ...

  10. tiny4412 --uboot移植(2) 点灯

    开发环境:win10 64位 + VMware12 + Ubuntu14.04 32位 工具链:linaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-g ...