Linux Shell脚本编程
⒈为什么要学习Shell编程
1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理
2)对于JavaEE和Python程序员来说,有些工作需要编写一些Shell脚本进行程序或者是服务器的维护,例如编写一个定时备份数据库的脚本。
3)对于大多数程序员来说,需要编写Shell程序来管理集群。
⒉Shell是什么?
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止程序,甚至是编写一些程序。
⒊Shell脚本的格式要求
①Shell脚本以#! /bin/bash开头 ★含义是指定当前Shell脚本以那种Shell方式进行解析
②脚本需要有可执行权限。
⒋Shell脚本的执行方式
①输入脚本的绝对路径或相对路径
★1.执行的脚本需要有x(可执行)权限
②sh + 输入脚本的绝对路径或相对路径(不推荐)
★1.执行的脚本无需x(可执行)权限
⒌Shell语法
1)变量
ⅰ区分
Shell变量分为系统变量和用户自定义变量
系统变量有:$HOME,$PWD,$SHELL,$USER等等
★显示当前shell中所有变量:set | more 【带分页】
ⅱ定义
①基本语法
⑴定义变量:变量名=值
⑵撤销变量:unset 变量名
⑶声明静态变量:readonly 变量名,注:静态变量不能unset(撤销)。
②定义变量的规则
⑴变量名称可以用字母、数字和下划线组成,但是不能以数字开头。
⑵★等号两侧不能有空格。(一定注意)
⑶变量名称一般习惯为大写。
③补充
⑴C=`A-B` 反引号
⑵C=$(A-B) 等价于反引号
★每行代码不能以;结尾,#代表单行注释,:<<!内容!代表多行注释
ⅲ设置环境变量
①export 变量名=变量值 将shell变量输出为环境变量
②source 配置文件 让修改后的配置信息立即生效
③echo $变量名 查询环境变量的值
ⅳ位置(执行)参数变量
①介绍
当我们执行一个Shell脚本时,如果希望获取到执行脚本时的参数信息,就可以使用位置(执行)参数变量。
例如:执行./myshell.sh 100 200命令,我们可以通过位置(执行)参数变量从而在myshell脚本中获取并使用参数值100,200。
②基本语法
⑴$n:n为数字,$0代表命令行本身,$1-$9代表第1到第9的参数,第10及以上的参数需要用大括号包含,例如${12}。
⑵$*:这个变量代表命令行中所有的参数,$*把所有的参数看做为一个整体。
⑶$@:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待。
⑷$#:这个变量代表命令行中所有参数的个数。
ⅴ预定义变量
①介绍
就是Shell设计者事先已经定义好的变量,可以直接在Shell脚本中使用。
②基本语法
⑴$$:当前进程的进程号(PID)
⑵$!:后台运行的最后一个进程的进程号(PID)
⑶$?:最后一次执行命令的返回状态,0代表正在执行,非0代表执行错误
2)运算符
ⅰ介绍
如何在Shell中进行各种运算操作
ⅱ基本语法
①$((运算式))
②$[运算式] ★推荐
③expr 运算式
⑴expr中运算式中的运算符两边要有空格。
⑵expr特殊的运算符需要转义,例如:\*(乘号)
3)条件判断
ⅰ基本语法
[ 表达式 ] ★表达式的两边要有空格
非空返回true,可使用$?验证(0为true,>1为false)
例 [ 表达式 ] && echo OK || echo notOK 条件满足,执行后面的语句
ⅱ常用条件判断
①整数之间的比较
⑴= 字符串比较
⑵-lt 小于
⑶-le 小于等于
⑷-eq 等于
⑸-gt 大于
⑹-ge 大于等于
⑺-ne 不等于
②按照文件权限进行判断
⑴-r 有读的权限
⑵-w 有写的权限
⑶-x 有执行的权限
③按照文件类型进行判断
⑴-f 文件存在并且是一个常规的文件
⑵-e 文件存在
⑶-d 文件存在并且是一个目录
ⅲ if判断
①基本语法
⑴ if [ 条件判断式 ]; then
程序
fi
⑵ if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
fi
★1,[ 条件判断式 ],条件判断式两边必须有空格
2,推荐使用第2种方式
ⅳ case语句
①基本语法
case $变量名 in
"值1")
如果等于值1,则执行此处
;;
"值2")
如果等于值2,则执行此处
;;
...................
*)
如果都没有,则默认执行此处
;;
esac
4)循环
ⅰfor循环
① for 变量 in 值1 值2 值3 .....
do
程序
done
② for((初始值;循环控制条件;变量变化))
do
程序
done
ⅱ while循环
①
while [ 条件判断式 ]
do
程序
done
5)I/0
ⅰread读取控制台输入
基本语法:
read (选项) (参数)
常用选项:
-p:指定读取值时的提示符
-t:指定读取值时等待的时间(秒)
常用参数:
变量:指定读取值时的变量名
6)函数
Shell编程和其他编程语言一样,有系统函数和自定义函数,此处介绍两个系统函数。
ⅰ系统函数
①basename
返回完整路径最后/的部分,常用于获取文件名
基本语法:
basename [pathname] [suffix]
basename [string] [suffix]
basename命令会删除所有的前缀包括最后一个('/')字符,然后将字符串显示出来。
选项:
suffix为后缀,如果指定了suffix,basename会将pathname或string中的suffix去掉。
②dirname
返回完整路径最后/的前面部分,常用于返回路径部分
基本语法:
dirname 文件绝对路径
从给定的文件绝对路径中去掉文件名(非目录部分),然后返回剩下的路径(目录部分)。
ⅱ自定义函数
①基本语法
[function] funname [()]
{
Action;
[return int ;]
}
②调用
函数名 [值]
Linux Shell脚本编程的更多相关文章
- Linux shell脚本编程(三)
Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...
- Linux shell脚本编程(二)
Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...
- Linux shell脚本编程(一)
Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...
- Linux Shell脚本编程--Linux特殊符号大全
Linux Shell脚本编程--Linux特殊符号大全 linux_shell 特殊符号的介绍 2011
- Linux Shell脚本编程while语句
Linux Shell脚本编程while语句案例 1,每隔3秒,打印一次系统负载 #!/bin/bash while truedo uptime sleep 3done 2,把监控结果保存 ...
- Linux Shell脚本编程-基础1
概述: shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...
- Linux shell脚本编程基础之练习篇
shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...
- 【学习】Linux Shell脚本编程
1.脚本的组成和执行 Linux shell脚本的结构并不复杂,其主要由变量.内部命令以及shell的语法结构和一些函数.其他命令行的程序等组成,以下是一个简单的shell脚本. #!/bin/bas ...
- [linux] shell脚本编程-xunsearch安装脚本学习
安装脚本setup.sh #!/bin/sh # FULL fast install/upgrade script # See help message via `--help' # $Id$ # s ...
- Linux Shell脚本编程的注意事项
Linux下(Shell脚本 http://www.jbxue.com/jb/shell/)编程的一些注意事项,如编程风格.命名风格等. 一.常用技巧 ssh user@server bash < ...
随机推荐
- python自动化开发-[第十七天]-django的ORM与其他
今日概要: 1.name别名 2.模版的深度查询 3.模版语言之filter 4.自定义过滤器,filter和simpletag的区别 5.orm进阶 扫盲:url的组成 URL:协议+域名+端口+路 ...
- go实现Windows服务注册
go实现Windows服务注册 1.nssm下载:http://nssm.cc/download 2.服务注册 nssm.exe install 服务名 程序 样例如下: .\nssm.exe in ...
- MySQL5.7延迟复制半同步复制
MySQL5.7延迟复制半同步复制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.延迟复制 1>.什么是延迟复制 延迟复制是指定从库对主库的延迟至少是指定的这个间隔时间 ...
- 《Go并发编程实战》读书笔记-语法概览
<Go并发编程实战>读书笔记-语法概览 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客我们会快速浏览一下Go的语法,内容涉及基本构成要素(比如标识符,关键字,子 ...
- 《玩转Django2.0》读书笔记-Django配置信息
<玩转Django2.0>读书笔记-Django配置信息 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 项目配置是根据实际开发需求从而对整个Web框架编写相应配置信息. ...
- 【.net】The source was not found, but some or all event logs could not be searched
1.案发现场: 注册服务的时候 2.解决方案: 用管理员身份运行CMD,再注册服务: I had to run Command Prompt with Administrator Rights.
- Kafka技术内幕 读书笔记之(四) 新消费者——心跳任务
消费者拉取数据是在拉取器中完成的,发送心跳是在消费者的协调者上完成的,但并不是说拉取器和消费者的协调者就没有关联关系 . “消费者的协调者”的作用是确保客户端的消费者和服务端的协调者之间的正常通信,如 ...
- 使用sort函数进行排序
介绍 C++的一个重要组成部分STL(Standard Template Library),即标准模板库,是一些高级数据结构和算法的集合:高级数据结构(容器)主要包括list.set.vector.m ...
- c# 三种传参方式 in,out,ref
in:默认方式,传值不返回 out:不传值 但是会返回新值给予传参对象 ref:传存储地址,所以传参前必须赋值初始化,传值后的运算结果直接作用在传参上 Out和ref的效果差不多
- C++使用libcurl
1.下载地址https://curl.haxx.se/download.html 2.选择zip压缩包下载 3.选择合适自己的vc版本 4.启动项目选择libcurl 5.因为暂时不需要ssh2,预处 ...