shell脚本快速入门----shell基本语法总结
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基本语法总结的更多相关文章
- Shell脚本快速入门
最近看了下Shell脚本.曾经遇到很多现成的工具包里边就多次用到了Shell脚本.总之这东西的作用无非就是将一系列的操作进行整合. ·整合后使得一套工作更加模块化规范化. ·批量处理要比手动操作快得多 ...
- shell脚本快速入门----正则表达式
一. "." 符号 (一个英文句号) 用于匹配换行符之外的任意一个字符 如 root 可用r..t来匹配 二. "*"符号 重复匹配前一个字符 如ab abc ...
- shell脚本从入门到精通(初级)之入门篇
写在开头 本文是阅读<Linux命令行与shell脚本编程大全>时的一些笔记,主要是shell脚本的一些基本语法, 还有很多细节和高级内容没有写到. 笔者也是shell script菜鸟, ...
- 【转载】MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法
原文地址:MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法 作者:mchdba 某个初级dba误删index,mysql漫山遍野全是10S以上的慢sql,mysql ...
- 08 bash特性--shell脚本编程入门
shell脚本编程入门 编程语言介绍 编程语言分为:机械语言.汇编语言和高级语言: 计算机能识别的语言为机械语言,而人类能学习的并且能够方便掌握的为高级语言,所以,我们所编写的程序就要通过编译来转换成 ...
- shell脚本编程入门
Linux的Shell种类众多,这里我们关注的重点是Bash. 基本语法 环境变量$PATH IO重定向: 以<改变标准输入 如:tr -d '\r' < dos-file.txt 以& ...
- shell脚本从入门到精通
阿里云大学 shell脚本从入门到精通 第1 章 : shell脚本编程-变量-算术表达式-判断语句-if分支语句 第2 章 : case-for-While-双括号-循环嵌套-break-conti ...
- Shell基础快速入门 了解shell运行原理
Shell简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界 ...
- Shell教程快速入门
Shell即是一种命令语言,又是一种程序设计语言,使用者可以通过Shell访问操作系统的内核服务. Shell编程和java.python.C一样,只要一个能编写代码的文本编辑器和一个能解释执行的脚本 ...
随机推荐
- Linux运维学习第三周记
日落狐狸眠冢上 夜归儿女笑灯前 人生有酒须当醉 一滴何曾到九泉 愿醉卧沙场可未有匹夫之勇. 第三周学记 第三周主要学习正则表达式和Shell编程 1.正则表达式基本字符 2.扩展正则表达式 3.gre ...
- python自测100题
如果你在寻找python工作,那你的面试可能会涉及Python相关的问题. 通过对网络资料的收集整理,本文列出了100道python的面试题以及答案,你可以根据需求阅读测试.如果你看了还是不懂可以加我 ...
- Java 8新特性--Stream API
Java 8 API添加了一个新的抽象称为流Stream,以一种声明的方式处理数据,可以极大提高程序员的生产力,写出高效.干净.简洁的代码.这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可 ...
- poj 2229 一道动态规划思维题
http://poj.org/problem?id=2229 先把题目连接发上.题目的意思就是: 把n拆分为2的幂相加的形式,问有多少种拆分方法. 看了大佬的完全背包代码很久都没懂,就照着网上的写了动 ...
- DLL转存为IL文件及修改后重新生成DLL文件
DLL反编译工具有:dotPeek (jetbrains) .ILSpy DLL转存IL使用:ildasm 打开DLL文件,选择file->dump. il .res重新生成DLL工具: ila ...
- Java动态代理——框架中的应用场景和基本原理
前言 之前已经用了5篇文章完整解释了java动态代理的原理,本文将会为这个系列补上最后一块拼图,展示java动态代理的使用方式和应用场景 主要分为以下4个部分 1.为什么要使用java动态代理 2.如 ...
- 常用数据结构-集合(set)
集合(set)是python中最容易被忽视的.使用集合的主要好处在于速度快. 集合的一些特性: 集合元素不能重复 不支持索引访问集合中的元素 集合使用散列之后,可以在O(1)时间内访问元素 支持一些常 ...
- 打印Sql查询语句
如果在使用了yii的查询语句的话,可以打印本次的Sql,可以用 $model->find()->createCommand()->getRawSql();此语句返回的就是sql查询语 ...
- Jumpserver简介,部署使用
Jumpserver简介 Jumpserver 是一款使用 Python, Django 开发的开源跳板机系统, 为亏联网企业提供了认证,授权,审计,自动化运维等功能,基于ssh协议来管理,客户端无需 ...
- Blazor 准备好为企业服务了吗?
如果您正在编写 .NET Web 应用程序,您很可能已经意识最近一年在.NET Web开发领域的热点都是 Blazor 的.如果你还没有了解Blazor,它允许您使用 C# 来编写 Web UIs,传 ...