1.#!脚本的开头

#!/bin/bash

2.脚本属性

添加可执行属性,chmod +x 或使用“.”运行,例如运行当前目录下的a.sh 可执行命令 “. ./a.sh”

文件格式要是unix,在linux下创建的文件没有问题,在windows下写的脚本要特别注意文件格式

查看文件格式 vim 打开文件

set ff 查看文件格式

set ff=type 设置文件格式,type为文件格式

3.变量

字母下划线开头,后面可以跟字母下划线和数字

赋值: a=1 等号两边不能有空格;

取消变量unset

使用弱变量,可以没有类型,不定义类型时都当做字符串对待,

定义的变量如果不加local修饰,则为全局变量,在整个脚本范围内起作用

用export 可以将脚本变量导出为环境变量

位置参数$0为脚本名字 $n为脚本的第n个参数

$? 命令和脚本的返回值

$* 或$#表示命令行参数个数

只读变量readonly

4.数组

定义 :a=('1' '2'); a的值用括号括起来,成员用单引号包含,成员与成员之间用空格隔开

指定成员赋值 a=([2]=1 [3]=2);

引用 :${a[1]}

${array[@]} ${array[]} 得到整个数组元素 输出相同,但@获取的结果是以空格隔开的各个元素,输出的是一整个字符串

数组截断:${array[@]:1:2}取出数组的第一到第二个元素

连接数组 c=(${a[@]} ${b[@]})

替换元素 c=(${c[@]/str1/str2})

5.转义和引用

\ 使用转义字符可以使\ 后的字符仅当做字符来使用

" " 部分引用,在部分引用中$ `(反引号) \ 仍然会被解释会特殊含义

' ' 全引用,全引用中多有字符只当做普通字符

6.命令替换

将命令的标准输出作为赋值赋给某个变量

使用(`)或$()

$()仅在bash shell用有效

以date命令为例

DATE=`date'

DATE=$(date)

7.运算符

1.算数运算符

+ - * / % ** (幂运算)+= -= *= /= %= ++ --

使用let命令计算

let a=1+2

2.位运算符,

<< >> & | ^ ~同样使用let命令来进行操作

3.使用$[]或$(())运算

echo $[2+3]

4.使用expr运算

expr 1 + 1 要求操作数和操作符时间用空格隔开

5.declare命令

用declare 声明变量类型,后续可以直接运算

declare -i a;

a=1+1;操作符两侧不能有空格

6.使用bc做浮点数运算

e=$("scale=3;$a/$b"|bc);

scale设置浮点数的现实位数,不设置则显示为整数结果

8.测试和判断

test [ ]

格式 test expression 或者 [ expression ] 注意表达式两侧均有空格;

1.文件测试

-b FILE 文件存在且为块设备时返回真

-c FILE 文件存在且为字符设备时返回真

-d FILE 文件存在且为目录时返回真

-e FILE 文件或目录存在是返回真

-f FILE 文件存在且为普通文件时返回真

-x FILE 文件存在且为可执行文件时返回真

-w FILE 文件存在且可写时返回真

-r FILE 文件存在且可读时返回真

-l FILE 文件存在且为链接时返回真

-p FILE 文件存在且为管道时返回真

-s FILE 文件存在且大小不为0时返回真

-S FILE 文件存在且为socket时返回真

-g FILE 文件存在且设置了SGID时返回真

-u FILE 文件存在且设置了SUID时返回真

-k FILE 文件存在且设置了sticky时返回真

-G FILE 文件存在且属于有效用户组时返回真

-O FILE 文件存在且属于有效用户时返回真

FILE1 -nt FILE2 当文件1比文件2新时返回真

FILE1 -ot FILE2 当文件1比文件2旧时返回真

2.字符串测试

-z “string”字符串为空时返回真

-n “string”字符串不为空时返回真

“string1”= “string2”相同返回真

“string1”!= “string2”不相同返回真

“string1” > “string2”字典排序,string1排在string2之前返回真

“string1”< “string2”字典排序,string1排在string2之后返回真

3.整数比较

"num1" -eq "num2" 相等

"num1" -gt "num2" 大于

"num1" -lt "num2" 小于

"num1" -ge "num2" 大于或等于

"num1" -le "num2" 小于或等于

"num1" -ne "num2" 不等于

4.逻辑测试符

!expression 非

expression1 -a expression2 且

expression1 -o expression2 或

5.逻辑运算符

!逻辑非,对真假取反

&& 逻辑与,连接两个表达式,只有两个表达式都为真时,结果才为真

|| 逻辑或

9.逻辑结构 判断分支

1.if

//基本结构
if expression;then
command1
command2
fi //if/else结构
if expression;then
command1
command2
else
command3
fi //if/elif/else结构
if expression;then
command
elif expression2;then
command
fi

2.case

case VAR in
var1) command;;
var2) command;;
var3) command;;
*)command;;
esac

10.逻辑结构 循环

1.for

for VARIABLE in (list) //如果变量列表是连续的数字,可以写做 {1..n} $(seq 1 n) 或者$(seq 1 2 100) 表示从1到100,每次增加2,即1到100的奇数
do
command
done //类C的for循环
for((expression1;expression2;expression))
do
command
done

2.while

while expression
do
command
done //while 死循环
while (1)
while true
while:

3.until

unitl wxpression
do
command
done
//until死循环
until ((0))
until false

4.slect

和单参数的for相似,也可以用if case实现

select varible in (list)
do
command
done

5.循环控制 break continue

break 单独一个break,跳出当前循环,break n,跳出当前n层循环

continue 结束当前循环,进入下一次循环,continue n,结束当前n层循环,

11.函数

1.定义

function FUNCTION_NAME()       //关键字function可以省略
{
command1;
command2;
return n; //当函数带有返回值时,通过$?来接收返回值
}

2.函数参数传递

即使是全局变量,不传递给函数,函数也无法使用,相反,如果函数内部的变量未声明local,则函数内部的变量在整个儿脚本中都可以使用

函数传参形式

  function $a

shell脚本快速入门----shell基本语法总结的更多相关文章

  1. Shell脚本快速入门

    最近看了下Shell脚本.曾经遇到很多现成的工具包里边就多次用到了Shell脚本.总之这东西的作用无非就是将一系列的操作进行整合. ·整合后使得一套工作更加模块化规范化. ·批量处理要比手动操作快得多 ...

  2. shell脚本快速入门----正则表达式

    一. "." 符号 (一个英文句号) 用于匹配换行符之外的任意一个字符 如 root 可用r..t来匹配 二. "*"符号 重复匹配前一个字符 如ab abc ...

  3. shell脚本从入门到精通(初级)之入门篇

    写在开头 本文是阅读<Linux命令行与shell脚本编程大全>时的一些笔记,主要是shell脚本的一些基本语法, 还有很多细节和高级内容没有写到. 笔者也是shell script菜鸟, ...

  4. 【转载】MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法

    原文地址:MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法 作者:mchdba 某个初级dba误删index,mysql漫山遍野全是10S以上的慢sql,mysql ...

  5. 08 bash特性--shell脚本编程入门

    shell脚本编程入门 编程语言介绍 编程语言分为:机械语言.汇编语言和高级语言: 计算机能识别的语言为机械语言,而人类能学习的并且能够方便掌握的为高级语言,所以,我们所编写的程序就要通过编译来转换成 ...

  6. shell脚本编程入门

    Linux的Shell种类众多,这里我们关注的重点是Bash. 基本语法 环境变量$PATH IO重定向:  以<改变标准输入 如:tr -d '\r' < dos-file.txt 以& ...

  7. shell脚本从入门到精通

    阿里云大学 shell脚本从入门到精通 第1 章 : shell脚本编程-变量-算术表达式-判断语句-if分支语句 第2 章 : case-for-While-双括号-循环嵌套-break-conti ...

  8. Shell基础快速入门 了解shell运行原理

    Shell简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界 ...

  9. Shell教程快速入门

    Shell即是一种命令语言,又是一种程序设计语言,使用者可以通过Shell访问操作系统的内核服务. Shell编程和java.python.C一样,只要一个能编写代码的文本编辑器和一个能解释执行的脚本 ...

随机推荐

  1. spring boot:用rocketmq发送延时消息用来取消订单(spring boot 2.3.3)

    一,为什么要用延时消息来取消订单? 1,为什么要取消订单 在电商的下单过程中,需要在生成订单时扣减库存, 但有可能发生这种情况:用户下了单,临时改变主意不再支付, 则订单不能无限期的保留,因为还要把占 ...

  2. centos8上添加sudoer用户

    一,检查服务器是否已安装sudo的rpm包? 1,查询rpm包列表 [root@yjweb ~]# rpm -qa | grep sudo libsss_sudo-2.0.0-43.el8_0.3.x ...

  3. xpath教程-通过ID和Class检索 转

    通过ID和Class检索   必备知识点 在html中,id是唯一的 在html中,class是可以多处引用的 工具 Python3版本 lxml库[优点是解析快] HTML代码块[从网络中获取或者自 ...

  4. Linux命令之date +%F

    date命令显示当前日期 date +%F显示当前日期 [10:02:52 root@C8[ 2020-06-16DIR]#touch `hostname`_`date +%F`.log [10:03 ...

  5. Django( 学习第三部 Django的url路由层)

    目录 url路由层 路由匹配(有名分组与无名分组) 反向解析 路由分发 名称空间(了解) Django版本区别 url 路由匹配 注意事项: url方法,第一个参数是正则表达式,只要第一个参数能够匹配 ...

  6. 关于linux epoll的了解

    使用select/poll模型假设一台服务器需要支持100w的并发连接,在_FD_SETSIZE为1024时,则至少需要1k个进程 除了进程间的上下文切换的时间消耗外,从内核/用户空间,大量的无脑内存 ...

  7. Api版本控制

    版本控制是计算机软件行业人士使用的术语.但进化是我们所有人都要经历的事情,它适用于这个世界上的每个对象. 在计算机软件行业,可以看到每3至4年,每台计算机软件都会附带不同的发行版/版本,以满足当前/现 ...

  8. Python opencv resize图片并保存原有的图像比例

    参考链接:https://www.jianshu.com/p/3092835eab61 现有的图像是高瘦高瘦的,所以直接resize成矩形不合适.改变了整个结构. 所以采用的是先resize再padd ...

  9. 专攻知识小点——回顾JavaWeb中的servlet(二)

    续前篇... ServletConfig对象 Servlet的配置对象,ServletConfig对象作用域只能在一个Servlet类中使用.每个Servlet类都维护一个ServletConfig对 ...

  10. GXOI2018 滚粗记

    今天考了一次蜜汁省选,滚粗了.想了想,还是写点什么记录一下 8:10 折腾一番总算拿到题目和样例了,一打开dpf,立马感觉到了不对劲. 题目一股浓浓的劣质模拟题的画风,先不说题目质量,单是排版质量都被 ...