Shell脚本基本规则
Shell
外层应用程序---->Shell命令解释器---->内核---->硬件
为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序
用户可以用Shell来启动、挂起、停止、甚至编写一些程序
简单的Shell脚本
1)、格式要求
以#!/bin/bash开头(用bash解析)
脚本有可执行权限
文件后缀一般为(.sh)
echo ‘’‘’输出
2)、两种执行方式
当前路径:./文件名
绝对路径:/
若不赋予可执行权限,可使用sh ./文件名执行(不推荐)
3)、注释方式
单行:#
多行: :<< 内容
!
4)、后台运行
./文件名 &
Shell变量
1)、系统变量:$HOME $PWD $SHELL $USER等
PS:显示当前SHELL中所有变量:set
2)、用户自定义变量:
①定义: 变量=值
引用或输出的时候需要 $
②撤销: unset 变量
③声明静态变量:readonly 变量 PS:不能unset
3)、变量命名规则
①由字母、数字和下划线组成、不能以数字开头
②等号两侧不能有空格
③变量名称一般习惯大写
4)、将命令返回值赋给变量
A=`ls -alh` 反引号
A=$(ls -alh)
5)、设置环境变量(在etc/profile中添加,在其它Shell中可使用)
①export 变量名=变量值 将该变量输出为环境变量
②source 配置文件 使得修改后的配置信息立即生效
③echo $变量名 查询环境变量的值
6)、位置参数变量
执行Shell脚本时,有参数需要传入到文件类部进行使用,就可以使用到位置参数变量
①基本语法:
$n (n为数字,表示1~9个参数,十以上的参数需要用大括号包起来${n})
PS:$0代表所调用Shell脚本的语句,如:./abcd.sh
$* (代表命令行中所有的参数,把所有的参数看成一个整体)
$@ (代表命令行中所有的参数,把每个参数区分对待)
$# (代表命令行中所有参数的个数,不统计$0)
7)预定义变量
Shell预先定义好的变量,可直接在Shell脚本中使用
①基本语法:
$$ (当前进程的进程号(PID))
$? (最后一次执行命令的返回状态,0表示正确运行,非0(可由自己定义)表执行不正确)
运算符
1)、基本语法
①((运算式))或((运算式))或((运算式))或[运算式]
②expr m + n (运算符间要有空格,给变量赋值时,需使用反引号括起来)
运算符:* 乘 , / 除 ,% 取余
条件判断
1)、基本语法
[ condition ] 非空返回true,可使用$?验证(condition前后有空格)
2)、常用判断条件
①整数的比较
= (比较字符串) -lt(小于) -le(小于等于)
-eq(等于) -gt(大于) -ge(大于等于) -ne (不等于)
②按照文件权限进行判断
-r 有读权限 -w 有写权限 -x 有执行权限
③按照文件类型进行判断
-f 文件存在并且是一个常规文件 -e文件存在
-d 文件存在并且是一个目录
流程控制
1)、if判断
基本语法:
if [ 条件判断 ]; then 执行语句 fi
if [ 条件判断 ] then 执行语句 elif[ 条件判断 ] then 执行语句 fi (一般使用)
2)、case
case $变量名 in
“值1”) 执行语句 ;;
“值2”) 执行语句 ;;
*) 执行语句 ;; #表其它情况
esac
3)、for循环 (使用到$*,$@)
for 变量 in 值1 值2 值3 …
(使用“$*”,会执行一次,使用“$@”,会循环多次,不使用“”时都表示多个参数)
do
执行语句
done
for((初始值;循环控制条件;变量变化(可使用i++)))
do
执行语句
done
4)、while循环
while [ 条件判断 ] (有空格)
do
执行语句
done
读取控制台输入
read [option] [parameter] (和echo 相当于输入输出,若不指定变量,默认赋值给变量REPLY)
选项:
-p: 指定读取值时的提示符。
-t: 指定读取值时等待的时间(秒),超时就不会等待。
-a arrayname : 把单词清单读入arrayname的数组里。
-r :line允许输入包含反斜杠。
-t num:指定读取等待时间为num秒。
-n num:从输入中读取num个字符并存入变量,不需要按回车读取。
-d “:” :定界符“:”结束输入行。
函数
1)、系统函数(常用)
①basename [pathname] [suffix]
basename [string] [suffix]
选项:suffix ,若suffix被指定,会将pathname或string中的suffix去掉
作用:返回完整路径最后的部分,去掉最后一个/前的所有字符(包括/),用于获取文件名
②dirname 类似于basename,除去文件部分而返回路径部分
2)、自定义函数
基本语法:’[]'表可省略
[ function ] funname[()] (不需要形参)
{
执行代码
}
调用直接使用 funname [ 参数]
PS:函数可以有返回值,在调用函数后,通过$?提取,如下图,直接用变量接取到的“返回值”是函数内部echo的内容
Shell脚本基本规则相关推荐
- shell编程:对话 UNIX: 更多 shell 脚本技术
尽管在近两年使用过 UNIX 的一些人可能尝试过 shell 脚本编程,但是他们很可能只是研究操作系统的细节,并不精通 shell 脚本编程.本文针对那些希望进一步了解 shell 脚本,并开始编写更 ...
- shell脚本7天实战(上)
第一章 SHELL的基本介绍 编程语言分类介绍 计算机只能识别机器语言(如:01010101001这种), 程序员不能直接去写01这种代码,所以要程序员所编写的程序语言翻译成机器语言.将其他语言翻译成 ...
- Shell脚本执行效率
一.引言 低效的shell脚本设计会进一步影响原本解释器模式下并不见长的程序运行效率,使其在面对大数据量文本分析时的资源与时间消耗变成难以接受的.本文分析了shell语言及其应用需求的特点,从分层设计 ...
- jar包部署shell脚本编写,在服务器上部署jar包,在Linux服务器上部署服务,设置编码格式,设置内存管理
准备步骤: 1.安装java环境,知道java安装目录 2.将jar包拖放或发送至服务器中(目录自定义) 一.编写shell脚本,将以下代码放在shell脚本中,将shell脚本放在jar包同级目录下 ...
- 快速给shell脚本加上使用提示
我们只需通过在shell脚本前面加上如下的代码即可: #!/bin/bash ### ### my-script - does one thing well ### ### Usage: ### my ...
- Ubuntu系统执行shell 脚本的方法
使用前了解 Shell: Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁 Shell: Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 下面 ...
- Windows 系统执行Shell 脚本的方法
使用前了解 Shell: Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁 Shell: Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 下面 ...
- shell监控java接口服务_Linux系统下Java通过shell脚本监控重启服务
简介 最近运维人员提出需求,增加一个运维页面, 查询当前的业务进程信息包括:进程名称.启动命令.启动时间.运行时间等,可以通过页面点击重启按钮,可以重启后端的一系列系统进程. 思路 java程序获取l ...
- linux 脚本 alias,在shell脚本中使用alias别名
本文最后更新于2015年7月12日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢! 缘由: 经常用Linux进行操作的同学一般都会有各种各样的技巧来提升工作效率,而添加/改写shell ...
最新文章
- 高斯混合模型GMM、核心参数、高斯混合模型GMM的数学形式
- java 枚举类 enum
- QWidget中加载QML页面并设置透明背景
- android StringBuffer的使用
- Kubernetes Federation V2搭建(持续更新)
- codeforces 703B
- 灵格斯怎么屏幕取词_电脑包尺寸怎么选?手提的好还是双肩的好?比较推荐哪款电脑包?...
- python中读写excel_python读写Excel
- SpringBoot 配置文件bootstrap和application的区别
- Linux/Centos下安装部署phantomjs 及使用
- 【Day01】你有封装过 axios 吗?主要是封装哪些方面?如何中断 axios 请求?
- 【Python爬虫】入门知识
- 十六进制高低位转换,返回十进制数
- 2021年全球及中国企业级路由器市场竞争格局分析,呈现出寡头竞争的市场格局「图」
- VS2015 无法启动IIS Express Web服务器
- Glide遇到重定向url产生的bug分析以及解决
- 蒸汽凝结水颜色发红十种常见除铁处理技术优劣对比
- 【Unity】基础游戏单位GameObject中常用的属性和API
- 嵌入式开发之linux根文件系统移植
- 一文看懂海明校验码及其计算方法(详细总结)
热门文章
- linux中如何让vim永久显示行号(永久显示+临时显示)
- oracle一个lun多大,Oracle RAC中验证LUN_ID对应情况
- JAVA Websocket 使用@PathParam无法获取参数
- C#LeetCode刷题之#728-自除数(Self Dividing Numbers)
- C#算法设计排序篇之01-冒泡排序(附带动画演示程序)
- 如何在xp中添加打印机
- 不要束缚:为什么我们会错过GitHub条纹
- node.js ejs_如何在Node.js应用程序中使用EJS模板
- 百度HTTPS认证显示“您的站点有链接未通过https检验”的解决办法
- Spring MVC中的基本流程