`
君淋天下
  • 浏览: 32568 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

shell脚本常用功能备忘录

阅读更多

bash常用功能备忘

背景

工作中偶尔要跟shell脚本打交道 但是shell脚本又不是频繁使用工具,再加上shell脚本本身的知识体系不够系统化。每次使用时一些基本的用法也要google确定下,现在特地整理下常用功能 做成模板方便以后参考使用

基本流程控制

一些说明

test命令
test命令用于表达式求值 并返回布尔值 ,如果表达式求值结果为true"退出状态"为0,为false退出状态为非0值 用 #?查看"退出状态"

test 1 -eq 1 
echo $?   # 显示为0  表示1 -eq 1执行结果为true

另外可以使用[]代替test命令 [ 逻辑表达式 ] 注意: 逻辑表达式和"[" "]"必须有空格 比如

[ 1 -eq 1 ]

test命令使用限制 不能有正则表达式扩展

整数 字符串 文件 测试

字符串判断

运算符 操作 说明
= "string1" = "string2" 等于操作
!= "string1" != "string2" 不等于操作
-z string -z string 判断字符串长度是否等于0
-n string -n string 判断字符串长度是否不等于0

整数比较操作

判断 说明
int1 –eq int2 Int1 is equal to int2
int1 –ne int2 Int1 is not equal to int2
int1 –gt int2 Int1 is greater than int2
int1 –ge int2 Int1 is greater than or equal to int2
int1 –lt int2 Int1 is less than int2
int1 –le int2 Int1 is less than or equal to int2

文件属性判断

判断 说明
–b filename Block special file
–c filename Character special file
–d filename Directory existence
–f filename Regular file existence and not a directory
–g filename Set-group-ID is set
–k filename Sticky bit is set
–p filename File is a named pipe
–r filename File is readable
–s filename File is nonzero size
–u filename Set-user-ID bit is set
–w filename File is writable
–x filename File is executable

if elif else 格式

if格式

if 逻辑表达式
then 
   执行语句
fi

其中逻辑表达式有两种写法 用[]
if [ 表达式 ]

if [ 1 != 2]
  then
     echo "1 != 2"
  fi

举个工作日还是周末判断例子

day_of_week=`date +"%u"`
echo "day_of_work=${day_of_week}"
if [ $day_of_week = 6 ] || [ $day_of_week = 7 ]; then
  echo "holiday"
else
   echo "workday"
fi

上面例子需要注意的是 逻辑与操作"||" 在两个[ ]之间 而不是预想的

[ $day_of_week = 6 ||  $day_of_week = 7 ]

用test if test 表达式 比如

if test 1 != 2
 then
   echo "1 != 2"
fi

if elif else 格式

if 条件表达式
 then
    执行语句
 elif 条件表达式
  then 
     执行语句
 else 
   执行语句
fi

代码例子

#!/bin/sh
current_hour=`date +%H`
echo "currnet time is $current_hour"  

if [ ${currnet_hour} -lt 12 ]; then
  echo "Good Morning"
elif [ ${currnet_hour} -lt 18 ]; then
  echo "Good Afternoon"
else 
 echo "Good evening"
fi

for 循环

格式

for 变量名 in 列表
do
  命令
done

打印字符串

for fruit in apple  orange banana
do
  echo $fruit
done

按行显示文件内容

for line in `cat /etc/passwrd`
   echo $line
done

$* 与 $@的区别

do while

while格式
while command 
do 
  command
done

例子

num = 0
while [ $num -lt 10 ]
do 
   echo -n $num
  num = `expr $num + 1`
done 
echo "循环之后 num值是 $num "

util命令

util命令格式与while一样 但是与while相反,只有条件表达式执行为false 的执行才会执行循环,当条件为非0时退出循环 util格式

util  条件表达式
do 
  command
done

shift命令

常用操作

日期时间操作

获取时间date命令 ####时间格式化 比如显示当前日期

date "+%Y%m%d"

%n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区 %a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期与时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)

时间加减

date +%Y%m%d //显示现在天年月日 date +%Y%m%d --date="+1 day" //显示后一天的日期
date +%Y%m%d --date="-1 day" //显示前一天的日期
date +%Y%m%d --date="-1 month" //显示上一月的日期
date +%Y%m%d --date="+1 month" //显示下一月的日期
date +%Y%m%d --date="-1 year" //显示前一年的日期
date +%Y%m%d --date="+1 year" //显示下一年的日期

或者更简单点的 date=date -d -${t}day '+%Y%m%d' //为t为前几天

函数

shell参数

变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

函数定义

函数格式 function_name () { commands ; commands; } 将函数传入的第一个参数加一并返回

increment  () {
 sum = \`expr $1 + 1\`;
 return $sum;
}

执行函数 increment 2 查看函数执行结果 echo $?

函数参数和返回值 函数总结 shell脚本的函数不能定义形参,这是于通用编程语言的差别 函数内部的变量在函数外也可以返回 函数必须先定义再使用

分享到:
评论

相关推荐

    Linux课程设计报告shell编程.doc

    本课程设计通过编写 shell 脚本,实现了日程提醒功能和备忘录管理功能,为学生提供了实践 Shell 编程的机会。通过本课程设计,学生将学习到 Shell 语言的一般语法规则和 Shell 程序的执行环境和执行过程。

    开发者常用及实用Linux Shell命令备忘录(小结)

    本篇作为命令备忘录,我会将实际工作当中用到的命令记录下来,并长期保持更新。 1.which which 用于查找一个文件,并返回绝对路径,查找的目录范围由系统的 PATH 指定。 由于 Linux 中一切皆文件,所以 which 指定...

    基于Shell与C#混编的日常备忘录设计源码

    该备忘录系统源码采用Shell与C#混合编程语言开发,包含101个文件,涵盖了77个Markdown文件、3个配置文件、3个C#源文件、3个Shell脚本文件以及多种格式文件,如YAML、JSON、XML等。系统旨在为用户提供便捷的日常记录...

    linux初级命令备忘录中文版.pdf

    本备忘录旨在帮助对Linux感兴趣的人员快速掌握一些常用命令,以便于日常操作和开发工作。 1. **SSH (Secure Shell)**:SSH是一种加密的网络协议,允许用户进行远程登录和命令执行。在Windows上,可以使用PuTTY和...

    Linux操作系统课程设计毕业设计论文.docx

    4. 编写一个 shell 脚本 makememo,实现备忘录管理功能可以通过以下步骤实现:编辑备忘录文件 memo,编写备忘录管理脚本 makememo,运行脚本,调试并检查运行结果。 结论: 通过本次实验,我们加深了对 Linux 操作...

    Linux课程设计shell编程.doc

    2. 编写一个 shell 脚本 makememo,实现备忘录管理功能 3. 选作:修改脚本,改良或增加新的功能 实验步骤 ### 步骤 2.1 - 编辑备忘录 在 exp3 目录下,编辑一个备忘录文件 memo,其中的每行为一项日程安排,格式...

    ilnux操作系统课程设计.doc

    * 实验内容包括编写 Shell 脚本实现日程提醒功能和备忘录管理功能。 实验步骤 1. 基本操作 * 编辑备忘录文件 memo,实现日程安排功能。 * 编写 Shell 脚本 routine,实现日程提醒功能。 * 运行脚本 routine,...

    MEMO:工作备忘录

    而“MEMO:工作备忘录”可能是指一个专门存储此类信息的文件或系统,其中可能包括一系列与工作相关的Shell脚本、命令和技巧。 Shell,特别是Linux或Unix系统的Bash Shell,是命令行界面的交互式解释器,用户可以通过...

    awesome-memo:精选的精选备忘录

    在这个项目中,我们可以看到开发者对备忘录功能的深入理解和独特应用,尤其是与Shell的结合,为我们提供了高效、便捷的笔记管理方式。 Shell,即Unix或Linux操作系统的命令行接口,以其强大的命令处理能力和自动化...

    备忘录

    备忘录(Memo)通常指的是记录和管理日常事务的文本文件或应用程序,而在这个上下文中,"备忘录"可能是指一个Shell脚本或者一个用于处理Shell脚本的项目。"memo-master"可能是一个开源项目的名称,专门用于管理和...

    scripts:我写的各种脚本

    SmartOS 备忘录 显示 SmartOS 区域的内存使用情况 dave @ [ nexus :: (SunOS) ] ~ # /opt/memusage.sh ALIAS MEMORY (mb) UUID global 92.8398mb / 1.75922e+13mb - go 46.1484mb / 256mb 00105c11-fed4-413c-...

    点文件:各种点文件,关联的脚本和备忘单

    下面将详细阐述这些点文件以及相关的脚本和备忘单。 首先,`.vimrc`是Vim编辑器的配置文件,它存储了用户自定义的快捷键、插件设置、颜色方案等。Vimscript是用于编写.vimrc文件的编程语言,通过学习Vimscript,...

    PowerShellComponent.rar

    PowerShellComponent.rar是一个压缩包,其中包含了与PowerShell相关的示例和备忘录,这可能是为了帮助用户理解和应用PowerShell在C#编程以及Exchange服务器管理中的功能。PowerShell是一种强大的命令行工具,由...

    golang_project_dev_tools

    文件夹备忘录 doc / install:放置有关项目的安装doc doc / man:放置manuel doc 出/仓放置临时调试输出仓 工具放置工具脚本..etc 第三/外地第三方组件/库 部署地点部署脚本 设计/资产放置设计资产 设计/文档位置...

    Graphviz自动根据文件生成时间序列图脚本和示例demo文件

    可以使用shell脚本、Python、Perl或其他编程语言来自动化整个过程。脚本会读取数据文件,处理数据,然后调用Graphviz的命令行工具(如`dot`)来生成图形。生成的图像可以通过设置输出格式(如PNG、PDF或SVG)进行...

    项目sql及文件

    7. **部署脚本**:自动化部署的脚本,如Dockerfile或shell脚本,用于构建和发布应用程序。 在项目开发和维护过程中,确保所有这些文件的版本控制至关重要。使用Git等版本控制系统可以帮助跟踪代码更改,回滚到旧...

    安全备忘单:for各种信息安全工具和主题的备忘单的集合

    在“bash security cheatsheets”这个标签中,我们可以推断出该集合可能包含了一些关于Bash shell脚本安全方面的内容。Bash是Linux和Unix系统中广泛使用的命令行解释器,理解其安全最佳实践对于系统的安全性至关重要...

    archlinux.java-design-patterns-git

    3. **行为型模式**:如策略(Strategy)、模板方法(Template Method)、观察者(Observer)、迭代器(Iterator)、访问者(Visitor)、命令(Command)、备忘录(Memento)、状态(State)、职责链(Chain of ...

Global site tag (gtag.js) - Google Analytics