shell脚本基础教程
一、什么是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脚本基础教程的更多相关文章
- 【转贴】bat脚本基础教程
bat脚本基础教程 https://www.cnblogs.com/linyfeng/p/8072002.html 自己动手太少了. bat脚本就是DOS批处理脚本,就是将一系列DOS命令按照一定顺序 ...
- 详细介绍Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- Shell脚本系列教程二: 开始Shell编程
Shell脚本系列教程二: 开始Shell编程 2.1 如何写shell script? (1) 最常用的是使用vi或者mcedit来编写shell脚本, 但是你也可以使用任何你喜欢的编辑器; (2) ...
- shell脚本-基础
shell脚本-基础 编程基础 程序是指令+ 数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell 程序提供了编程能力,解释执行. 计算运行二进 ...
- Linux shell脚本基础学习详细介绍(完整版)二
详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...
- Linux shell脚本基础学习详细介绍(完整版)一
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- Shell脚本基础学习
Shell脚本基础学习 当你在类Unix机器上编程时, 或者参与大型项目如k8s等, 某些框架和软件的安装都是使用shell脚本写的. 学会基本的shell脚本使用, 让你走上人生巅峰, 才怪. 学会 ...
- 什么是Shell?Shell脚本基础知识详细介绍
这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...
- Shell脚本深入教程(1):快速入门
Shell脚本基础入门 Bash注释 Bash只支持单行注释,使用#开头的都被当作注释语句: # 整行注释 echo hello world # 行尾注释 通过Bash的一些特性,可以取巧实现多行注释 ...
随机推荐
- Maven私服(Nexus)启动创建Windows服务
sc create lutao-maven-nexus binpath= D:\maven-server\nexus--\bin\nexus.exe type= own start= auto dis ...
- UNITY 打包时提示sdk tools 或 sdk build tools版本低时可以直接点update 按钮进行更新
如题.如果不更新,而选择 : use newest version installed ,打包到结尾时可能会报错,莫名其妙的java错误 而且,SDK一旦被更新后,其所在目录的 SDK MANAGER ...
- git从远程分支clone项目到本地,切换分支命令,其他常用命令
1.在git命令窗口输入git clone git@139.129.217.217:sg/sgsq_cms.git 回车,即可克隆远程项目到本地.红色字体为远程分支的SSHkey,可以登录到gitli ...
- springboot @scheduled 并发
本文介绍如何使用springboot的sheduled实现任务的定时调度,并将调度的任务实现为并发的方式. 1.定时调度配置scheduled 1)注册定时任务 package com.xiaoju. ...
- DJango 基础 (4)
Django模板标签 知识点: 基本概念 常用标签 模板标签例子 模板继承与应用 注释标签 模板标签 标签在渲染的过程中提供任意的逻辑. 这个定义是刻意模糊的. 例如,一个标签可以输出内容,作为控制结 ...
- CentOS 特殊变量($0、$1、$2、 $?、 $# 、$@、 $*)
名称 说明 $0 脚本名称 $1-9 脚本执行时的参数1到参数9 $? 脚本的返回值 $# 脚本执行时,输入的参数的个数 $@ 输入的参数的具体内容(将输入的参数作为一个多个对象,即是所有参数的一个列 ...
- Centos7安装部署Zabbix3.4
1.关闭selinux和firewall 1.1检测selinux是否关闭 [root@localhost ~]# getenforce Disabled ...
- Eclipse 创建Android 模拟器失败:no cpu/abi system image available for this target
(从网上搜了一个使用Android 4.4 API 20编译的图片) 这是因为SDK中没有模拟器使用的操作系统镜像. 如果项目使用API 19编译,则SDK中的system-images文件夹下,需要 ...
- 445. Add Two Numbers II 链表中的数字求和
[抄题]: You are given two non-empty linked lists representing two non-negative integers. The most sign ...
- tiny4412 --uboot移植(2) 点灯
开发环境:win10 64位 + VMware12 + Ubuntu14.04 32位 工具链:linaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-g ...