shell script总结大全
sheel script
shell脚本语法规范
如何书写一个shell脚本
文件没有扩展名的概念,最好以.sh结尾,最好在30个字符以内
#代表注释,#!是特例,定义脚本在哪个路径运行
脚本的说明字段
- 运行解析路径#!/bin/bash
- 作者#Author:guying
- 时间#Created Time
- 版本号#Release:1.0
- 脚本描述#Script Description:nginx install script
- 如何自动生成???
脚本组成
- #解释环境:例如#!/user/bin/env或者bash |python|perl
- #注释说明
- #执行代码
如何运行一个shell脚本
- 给执行权限 ./文件名
- 解释器直接运行,不需要给权限 bash 文件名
- 解释环境有很多种,例如bash sh ,用cat /etc/shells查看
shell中的特殊符号
- ~ 代表家目录,# cd ~
- ! 执行历史命令 !!执行上一条命令
- $ 变量中取内容符
- % 对应数学运算,加减乘除取余数
- & 后台执行
- shell中的通配符 匹配所有
- ? shell中的通配符 ,匹配除了回车键以外的一个字符
- ; 分号可以在shell中一行执行多个命令,命令之间用分号分隔
- | 管道
- \ 转义字符
- 反引号 ,命令中执行命令 echo ”today is
date+%F
“ - ’ ’ 单引号,脚本中字符要用单引号引起来,但是不同于双引号的是,单引号不解释变量
- " " 双引号,脚本中出现的字符串可以用双引号引起来
shell在管道中的应用
- 用于拼接命令,通过管道可以执行一些复杂的数据处理操作
shell中的运算
算术运算(四则运算)
- % 对应数学运算,加减乘除取余数
运算命令
整形运算
- -expr只能做整数运算
- -let只能做整数运算,而且运算元素必须是变量,无法直接对整数做运算let sum=1+1
- -$(( ))双小圆括号里也可以做数学运算
- -bc计算器
浮点运算
- -bc采用命令组合的方式实现,echo “scale=N;数学表达式”|bc,例如echo ”scale=2;100*3“|bc
比较运算
整形比较运算
精确比较
- -eq等于
- -gt大于
- -lt小于
模糊比较
- -ge大于或等于
- -le小于或等于
- -ne不等于
字符串比较运算
- =等于返回true
- ! =不等于返回ture
- -n 检查字符串的长度是否大于0,不为0返回true
- z 检查字符串的长度是否为0,为0返回true
- $ 检测字符串是否为空,不为空就返回true
逻辑运算
使用场景
- 多条件同时判断
逻辑运算符
- && 真真为假、真假为假、假假为假
- || 真真为真、真假为真、假假为假
- ! 非假为真、非真为假
逻辑与或的短路运算
- 逻辑与中靠前的条件中出现了假,后面的就不再判断了,因为已经是假的了
- 逻辑或中靠前的条件中出现了真后面的就不再往后判断了,结果已经为真了
文件判断(文件类型、权限、新旧判断)
test判断命令
检测文件类型和比较运算
teat [命令选项] 表达式
命令选项
- -d 检查文件是否存在且为目录,若存在且为目录则为真
- -e 检查文件是否存在,存在则为真
- -f 检查文件是否存在且为文件,若存在且为文件则为真
- -r 检查文件是否存在且可读
- -s 检查文件是否存在且不为空, 如果文件存在且至少有一个字符则为真
- -w 检查文件是否存在且可写,可写则为真
- -x 检查文件是否存在且可执行,可执行则为真
- -O 检查文件是否存在且被当前用户拥有
- -G 检查文件是否存在且默认组为当前用户组
- -nt file1 -nt file2检查file1是否比file2新
- -nt file1 -ot file2检查file1是否比file2旧
- -ef file1 -ef file2检查file1和file2是否为同一个文件,判断依据的是i节点
- -b 检查文件是否为块设备文件,若文件存在且为块文件则为真
- -c 检查文件是否为字符设备文件,如果文件存在且为字符特殊文件则为真
- -g 检测文件是否设置了SGID位
- -k 检测文件是否设置了
布尔运算符
!
- 非
-o
- 或
-a
- 与
脚本的运行和退出
- 运行- bash 文件名- 退出- exit NUM推出脚本,释放系统资源,NUM代表一个整数,代表返回值。
为脚本设置可执行权限,并执行脚本
$ chmod +x test.sh
$ ./test.sh 1 2 3
- 输出第1、2、3个参数
格式化输出
echo命令
在显示器上显示一段文字
echo [-ne] [字符串]
命令选项
- -n 不要在最后自动换行
- -e 若字符串中出现以下的字符,则特别加以处理,而不会将它当成一般文字输出。
转义字符
- \b 删除前一个字符
- \c 最后不加上换行符号
- \n 换行且光标移至行首
- \t 插入tab符号
- \f 换行但是光标仍旧停留在原来的位置
shell的基本输入、输出
read命令 读取
命令选项
- -p打印信息
- -t限定时间
- -s不回显
- -n 输入字符个数
echo命令
显示普通字符串的时候,双引号可以省略
显示转义字符
echo “”\我是古颖"" 结果为"我是古颖"
- 双引号也可以省略
显示变量
- read name
- echo “$name It is a test”
显示换行
- echo -e “OK! \n” # -e 开启转义
显示不换行
- echo -e “OK! \c” # -e 开启转义 \c 不换行
显示结果定向至文件
- echo “It is a test” > myfile
原样输出字符串,不进行转义或取变量(用单引号)
- echo ‘$name"’
显示命令执行结果
- echo
date
这里是单引号
- echo
printf命令
语法:printf format-string [arguments…]
- format-string: 为格式控制字符串
- arguments: 为参数列表
格式替代符
%s
- 输出一个字符串
%c
- 输出一个字符
%d
- 整形输出
%f
- 输出实数
%-10s
- 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f
- 指格式化为小数,其中 .2 指保留2位小数。
printf的转义序列
shell字符串
单引号
- 单引号里的任何字符都会原样输出,单引号中的变量是无效的
- 单引号内的字符串中不能出现单独一个的单引号,可成对出现,对单引号使用转义字符后也不行
双引号
- 双引号中可以有变量
- 双引号中可以出现转义字符
拼接字符串
- 使用双引号拼接!!!
string=“guying is so beautiful”
获取字符串长度
- echo $(#string) 输出为4
提取子字符串
从字符串第二个字符开始截取4个字符
- echo ${string:1:4} 输出为 uyin
查找子字符串
查找字符i或g的位置(哪个字母先出现,就计算哪个)
echo
expr index "$string" ig
输出为1- 注意是反引号
shell数组
定义数组
用括号表示数组,数组元素用空格符号分开
array_name=(value0 value 1 value2)
或者单独定义数组的各个分量:
- array_name[0]=value0
读取数据
读取元素值
${数组名[下标]}
- valuen=${array_name[n]}
使用@获取数组的所有元素
- echo ${array_name[@]}
获取数组的长度(与获取字符串的方法相同)
获取数组元素的个数
- length=$(#array_name[@]}
- 或者length=${#array_name[*]}
获取数组单个元素的长度
- length=${#array_name[n]}
shell注释
#开头就是注释,除#!
多行注释
- :<<EOF
- 中间是注释内容
- EOF
shell传递参数
∗和*和∗和@的区别
相同
- 都是引用的所有参数
不同
- 只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)
shell流程控制
if else
语法格式
- if then elif then else fi(换行写)
- if then else fi
- if then fi
for循环
语法格式
- for
- do
- done
while循环
用于不断执行一系列命令,也用于从输入文件中读取数据
语法格式
- while
- do
- done
until循环
执行一系列命令直至条件为 true 时停止,与 while 循环在处理方式上刚好相反
语法格式
- untiil
- do
- done
多选择语句case•••esac
- 每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case … esac 语句
跳出循环
break命令
- 跳出所有循环(终止执行后面的所有循环)
continue命令
- 仅仅跳出当前循环
shell函数
可以带function fun() 定义,也可以直接fun() 定义,不带任何参数
函数参数
- $1 为第一个参数
- $2为第二个参数
shell输入输出重定向
重定向命令列表
输出重定向
command1 > file1
- 执行command1然后将输出的内容存入file1。
输入重定向
command1 < file1
- 从键盘获取输入的命令会转移到文件读取内容
shell文件包含
. filename # 注意点号(.)和文件名中间有一空格
或source filename
创建两个脚本,test1.sh和test2.sh,当test2.sh包含test1.sh,执行test2.sh时,需要给test2.sh添加可执行权限,被包含的test1.sh不需要添加可执行权限
- $ chmod +x test2.sh
- $ ./test2.sh
XMind: ZEN - Trial Version
shell script总结大全相关推荐
- 《linux命令行与shell脚本编程大全》第三版 - 核心笔记(3/4):函数与图形化脚本
<linux命令行与shell脚本编程大全> 全书4部分: ☆ [1]linux命令行(1-10章) ☆ [2]shell脚本编程基础(11-16章) ☆ [3]高级shell脚本编程(1 ...
- linux 命令行与shell脚本编程大全
linux 命令行与shell脚本编程大全 第一章 Linux LiveCD就是从cd读取的系统,由于没法将数据写入到cd,所以一旦重启,之前操作过后的一切数据都会丢失. 第二章 第三章 1.man手 ...
- 【2018深信服 醒狮计划】《Linux命令行与Shell脚本编程大全》学习笔记
2018深信服"醒狮计划"笔记 第3周(5.02-5.13) 课程 必修 选修 基本要求 Shell编程 <Linux命令行与Shell脚本编程大全> <Perl ...
- Linux命令行与shell脚本编程大全:第2版
<Linux命令行与shell脚本编程大全:第2版> 基本信息 作者: (美)布卢姆(Blum,R.) 布雷斯纳汉(Bresnahan.C.) [作译者介绍] 译者: 武海峰 丛书名: 图 ...
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---34
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: 转载于:https://www.cnbl ...
- 「学习笔记-Linux」学习Shell Script
学习Shell Script Table of Contents 1 什么是Shell Scipt 1.1 程序书写 1.2 程序执行 2 简单Shell练习 2.1 例1 接收用户输入 2.2 例2 ...
- Linux命令行与shell脚本编程大全(第3版)
作者:[美] 布鲁姆(Richard Blum),布雷斯纳汉(Christine Bresnahan) 著,门佳,武海峰 译 出版社:人民邮电出版社 品牌:iTuring 出版时间:2016-08-0 ...
- Linux_《Linux命令行与shell脚本编程大全》第十八章学习总结
时间:2017年12月04日星期一 说明:本文部分内容均摘取自书籍<Linux命令行与shell脚本编程大全>,版权归原作者所有.<Linux命令行与shell脚本编程大全>( ...
- linux 下 将 shell script 与 一个桌面图标联系在一起 (2)
Cy163注: 步骤如下: (1) 建立 xxxxx.sh (2) 在 vnc 虚拟终端 的desktop上,右键,然后选择"创建启动器" (3) ...
最新文章
- 博士因论文致谢走红后,回到母校演讲再刷屏!网友:是对寒门学子最好的激励...
- 在spring中,prototype scoped bean 如何注入单例bean中
- 【每日训练】2020/11/8(规律 + 二进制、单调栈 + 前缀和,后缀和、bitset + 枚举)
- 五个值得尝试的前端开发工具
- Flutter获取随机数 Dart语言核心基础
- gateway配置mysql_gateway中这样使用mysql正确么
- UE4 中的人工智能解析—ShooterGame为例
- java的传值和传址问题
- 解读畅捷通微服务治理能力提升之路
- DroidCamX – 让您的 Android 安卓手机瞬间变成电脑的高清无线摄像头
- 凸优化(Convex Optimization)是什么?
- 怎么在html中设置天数倒计时,PPT里面怎样设置时间倒计时,求大佬指教?
- 程序猿必备福利之二上篇!!!简易使用Nodejs实现从美图网爬取清晰脱俗的美图???
- 【在线教育-PC+手机-源代码】HDEDU在线网校系统–学习+练习+考试+支付+营销一站式!在线网校系统 学习练习考试 支付营销
- 盘点2021款iPad Pro 5个增强功能,与上一代有什么区别?
- 美国又搞事,芯片工程师们怒了
- 笔记连载 | Day19【综合实验】之【数字钟】【Intel Cycle IV FPGA平台验证】
- 小程序直播带货系统优势—直播带货的技巧
- 2019年3月CCF CSP 认证题解第一题
- 你的团队需要一个会讲故事的人读书笔记
热门文章
- Java逻辑操作符——逻辑非、逻辑与、逻辑或和逻辑异或
- 项城计算机培训学校,项城电脑培训班,项城电脑培训费用,项城电脑培训完好找工作吗 - IT教育频道...
- web前端大一实训 HTML+CSS+JavaScript王者荣耀(60页) web课程设计网页规划与设计 HTML期末大作业 HTML网页设计结课作业
- 每当变幻时 冷暖我心知
- 【先定一个小目标】数据挖掘学习进度总结
- 网鼎杯 AreUSerialz反序列化题目
- 工作量统计系统 java GUI
- 如何在win7系统中启动摄像头
- 十大尴尬瞬间!哪一个你中了?
- 谷歌眼镜开发Mirror API之API使用案例