linux脚本除号,Shell脚本编程(上)
Shell脚本编程基础
Shell 脚本基础:包含一些命令或声明并符合一定格式的文本文件
Shell 脚本用途:
1. 自动化常用命令
2. 执行系统管理和故障排除
3. 创建简单的应用程序
4. 处理文本和文件
创建Shell脚本:
首行的固定写法:
1. #!/bin/bash
2. #!/bin/sh
注:此行是告诉系统执行的时候要调用什么解释器。如果首行不写,那么执行的时候需要使用命令bash。
脚本写法:
注释写法:
#!/bin/bash
#
#Filename:XXXX.sh 脚本文件名称
#Description:xxxx 说明
#Author:xxxx 作者
#Email:xxxx@xx.xxx 联系方式
#Revision:1.0 版本
#Date:xxxxx 脚本创建日期
#Note:xxxx 注解
注:每一行之前最好有一个注释;脚本名称使用.sh结尾的尽量避免使用中文;#表示注释,此行不执行。
脚本的执行:
1. bash
2. sh
3. 加执行权限
1) 相对路径
2) 绝对路径
3) 放到$PATH变量指定的目录里面,直接执行(tab)
脚本调试执行:
bash -n 检查语法错误,不检查拼写错误
bash -x或sh -x 显示脚本执行的时候每一个命令具体的执行结果
变量:暂时存放数据的地方,一个具有名称的内存地址空间。
数据存储方式:1. 字符
2. 数值: 整形、浮点型
作用:1. 数据存储格式
2. 参与的运算
3.表示的数据范围
类型:
强类型(如 JAVA C#):数值型和字符型不能直接计算,除非显示把字符型转换成数值型。
弱类型(如 shell php):不会严格区分变量类型,定义变量的时候不用指定变量类型,默认字符型,如果想要计算的时候会自动帮你转换成数值型。
变量的命名规则:
1.不能使用if for bash cd ls date 关键字
2.不能以数字开头,不能使用特殊符号,只能使用数字、字母及下划线
3.见名知意:看见名字知道此文件的意义
4.建议变量使用大写
bash变量的种类:
本地变量(全局变量) 仅仅对当前shell生效
环境变量 对当前shell以及其他shell都生效 export
局部变量(私有变量) 生效范围位当前shell进程中某代码片段,通常用在函数里面,使用local
本地变量:name=’value’
可以使用引用value:
1.可以是直接字串:name=”root”
2.变量引用:name=”$USER”
3.命令引用:name=COMMAND name=$(COMMAND)
变量引用:${name} $name
” ” :弱引用 会把双引号里面的变量替换
‘ ‘ :强引用 不会把引号里面的变量进行替换
“ : 把反引号里面的命令执行结果赋值给变量
显示已定义的所有变量: set
删除变量: unset name
注:取消变量和变量置空是两种不同概念 unset HZ
HZ=
环境变量:
变量声明、赋值:
export name=VALUE
declare -x name=VALUE
变量引用: $name, ${name}
显示所有环境变量:
env, pringtenv, export, declare -x ,set
删除: unset name
bash有许多内建的环境变量:
$PATH 命令的搜寻路径
$OLDPWD 前一个工作目录
$LANG 目前的工作语系
$BASH bash的完整路径名
$BASH_VERSION Bash的版本
$HISTCONTROL 控制指令是否存入历史文件中
$OSTYPE 显示系统类型
$MAIL 存放邮件的文件
$MAILCHECK 多久检查一下邮件
$PWD 当前路径
$SSH_tty 当前登录的tty
$SHLVL 当前shell在几层
$RANDOM 随机数
只读变量:只能声明,但不能修改和删除
声明只读变量:readonly name
declare -r name
查看只读变量: readonly -p
位置变量: 在脚本代码中调用通过命令行传递给脚本的参数
$1,$2,…: 对应第1、第2等参数,shift [n]换位置
$0: 命令本身
$*: 传递给脚本的所有参数,全部参数合为一个字符串
$@: 传递给脚本的所有参数,每个参数为独立字符串。如”$@”用「”」括起来的情况、以”$1″ “$2” … “$n” 的形式输出所有参数。
$#: 传递给脚本的参数的个数
注:$@、$*只在被双引号包起来的时候才会有差异
set — 清空所有位置变量
算数运算
1. let num=算数表达式 let r=9+9
2. var=$[算数表达式] r=$[9+9]
3. var=$((算数表达式)) r=$((9+9))
4. expr 8 + 3 (注意要有空格!!!)
5. declare -i r=9+9
6. bc 计算1-100的和:echo {1..100} | tr ” ” “+” | bc
注: expr 8 * 8 乘号需要用\转义,除号不用
+=, i+=3等于i=i+3
-=, i-=3等于i=i-3
=, i=3等于i=i*3
/=, i/=3等于i=i/3
%=, i%=3等于i=i%3
i++ 先执行 执行完加1 (用的比较多)
++i 先加1,再执行
逻辑运算
true 1 false 0
1 与 1 = 1
1 与 0 = 0
0 与 1 = 0
0 与 0 = 0
1 或 1 = 1
1 或 0 = 1
0 或 1 = 1
0 或 0 = 0
与的时候 只要有一个为假 那么整个结果就是假的。
或的时候 只要有一个为真 那么整个结果就是真。
!1 = 0
!0 = 1
&& 与
|| 或
1 && 1 = 1
1 && 0 = 0
1 || 1 = 1
1 || 0 = 1
命令执行成功 我们认为是真
命令执行失败 我们认为是假
短路预算:
命令1 && 命令2
命令1 成功执行 则执行命令2
命令1 执行失败 则不会执行命令2
命令1 || 命令2
命令1成功执行,则命令2不执行
命令1执行失败,则命令2执行
命令1 && 命令2 || 命令3
如果命令1 成功执行 则执行命令2 且命令3不会执行
如果命令1 执行失败 那么命令2就不会执行,则命令3执行
如果 命令1 成功
则 命令2;
否则 命令3;
退出状态
使用$? 0代表前面一个命令执行成功
非0 代表前面一个命令执行失败
可以在脚本里面自定义退出状态
根据退出状态来判断一个命令的执行成功与否
exit [n]:自定义退出状态码
注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码
测试条件
test 测试条件
[ 测试条件 ]
[[ 测试条件 ]] 条件测试的前后要加上空格
生产环境建议使用两个中括号
数值测试:
-gt: 是否大于
-ge: 是否大于等于
-eq: 是否等于
-ne: 是否不等于
-lt: 是否小于
-le: 是否小于等于
[[ 6 > 2 ]] && echo “OK”
字符串测试
== 是否等于
> 是否大于
< 是否小于
!= 是否不等于
=~ 左边的字符串是否包含右边指定的字符串
注:此表达式一般用于[[ ]]中;扩展的正则表达式
-z 测试字符串是否为空,空为真,不空为假
-n 测试字符串是否不为空,不空为真,空为假
注:用于字符串比较时的用到的操作数都应该使用引号
原创文章,作者:木,如若转载,请注明出处:http://www.178linux.com/73306
linux脚本除号,Shell脚本编程(上)相关推荐
- linux之基础shell脚本编程1 基础变量赋值
本章主要介绍函数的基础,变量赋值,逻辑运算,条件表达式,测试 linux之基础shell脚本编程1 基础变量赋值 linux之基础shell脚本编程2 if语句循环判断 linux之基础shell脚 ...
- Linux基础篇--shell脚本编程基础
Linux基础篇–shell脚本编程基础 本章内容概要 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 7.1 编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为 ...
- Linux基础篇–shell脚本编程基础
本章内容概要 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 7.1 编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为 ...
- linux定时压缩脚本,使用shell脚本对日志文件进行定时压缩
系统在服务器上运行时,会产生大量的日志,每天产生的日志量达到几个G,甚至几十个G,这样磁盘空间很快就会满,系统也就挂掉了,所以需要对日志文件进行压缩,压缩之后的日志文件通常只有原文件十分之一,甚至更少 ...
- Linux下的shell脚本实战之用户创建
Linux下的shell脚本实战之用户创建 一.脚本要求 二.脚本内容 三.运行脚本 一.脚本要求 二.脚本内容 三.运行脚本 一.脚本要求 1.该脚本提示用户创建用户名和密码 2.判断输入的用户名是 ...
- Linux 中启用 Shell 脚本的调试模式
shell 脚本调试系列 Linux 中启用 Shell 脚本的调试模式 在 Shell 脚本中执行语法检查调试模式 在 Shell 脚本中跟踪调试命令的执行 概述 脚本是存储在一个文件的一系列命令. ...
- 如何在 Linux 中启用 Shell 脚本的调试模式
脚本是存储在一个文件的一系列命令.在终端上输入一个个命令,按顺序执行的方法太弱了,使用脚本,系统中的用户可以在一个文件中存储所有命令,反复调用该文件多次重新执行命令. 在学习脚本或写脚本的初期阶段,我 ...
- linux下执行shell脚本文件,Linux下使用shell脚本自动执行脚本文件
搜索热词 以下实例本人在Centos6.5 64位操作系统中使用 一.定时复制文件 a.在/usr/local/wfjb_web_back目录下创建 tomcatBack.sh文件 #将tomcat中 ...
- Linux篇:Shell脚本实现Gitlab双备份
01 前言 最近成功从架构组拿到了Gitlab的管理权限,第一件事就是想着如何备份,以防数据丢失背大锅,于是在网上搜索一番,发现一段非常赞的备份脚本,记录照着操作一下: 参考文章:https://bl ...
最新文章
- 洛阳综合保税区正式获国务院批复同意设立
- python 网关配置界面代码_Linux下使用python自动修改本机网关代码分享
- 光流 | 基于Matlab实现Lucas-Kanade方法:方法1(附源代码)
- vue filter对象_vue 过滤器
- 列举ospf的5种报文类型_OSPF的5种报文类型
- 将java.util.concurrent.BlockingQueue用作rx.Observable
- DBeaver连接达梦|虚谷|人大金仓等国产数据库
- win10 如何锁定计算机,Win10 1909 专业版怎么锁定计算机屏幕
- Front End Accessibility Development Guide
- ubuntu下安装mssql(sqlserver)客户端及使用
- 三星电视开机显示服务器异常,三星液晶电视常见故障及维修方法
- Python升级至2.7方法
- php tomcat配置_php+tomcat 配置运行环境
- GreenDao2.2升级GreenDao3.0的适配之路
- 算法——实现随机拿到30道不重复的20以内的加减法题目
- 通过SnmpWalk获取服务器状态信息
- lfs linux 教程,用LFS从零开始构建完整Linux系统
- ​ 每周一书《数学之美 第二版》分享!
- [GBase 8s 教程]GBase 8s ALTER TABLE 命令
- django 快速实现文件上传(django2.0)