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脚本的函数不能定义形参,这是于通用编程语言的差别 函数内部的变量在函数外也可以返回 函数必须先定义再使用
相关推荐
本课程设计通过编写 shell 脚本,实现了日程提醒功能和备忘录管理功能,为学生提供了实践 Shell 编程的机会。通过本课程设计,学生将学习到 Shell 语言的一般语法规则和 Shell 程序的执行环境和执行过程。
本篇作为命令备忘录,我会将实际工作当中用到的命令记录下来,并长期保持更新。 1.which which 用于查找一个文件,并返回绝对路径,查找的目录范围由系统的 PATH 指定。 由于 Linux 中一切皆文件,所以 which 指定...
该备忘录系统源码采用Shell与C#混合编程语言开发,包含101个文件,涵盖了77个Markdown文件、3个配置文件、3个C#源文件、3个Shell脚本文件以及多种格式文件,如YAML、JSON、XML等。系统旨在为用户提供便捷的日常记录...
本备忘录旨在帮助对Linux感兴趣的人员快速掌握一些常用命令,以便于日常操作和开发工作。 1. **SSH (Secure Shell)**:SSH是一种加密的网络协议,允许用户进行远程登录和命令执行。在Windows上,可以使用PuTTY和...
4. 编写一个 shell 脚本 makememo,实现备忘录管理功能可以通过以下步骤实现:编辑备忘录文件 memo,编写备忘录管理脚本 makememo,运行脚本,调试并检查运行结果。 结论: 通过本次实验,我们加深了对 Linux 操作...
2. 编写一个 shell 脚本 makememo,实现备忘录管理功能 3. 选作:修改脚本,改良或增加新的功能 实验步骤 ### 步骤 2.1 - 编辑备忘录 在 exp3 目录下,编辑一个备忘录文件 memo,其中的每行为一项日程安排,格式...
* 实验内容包括编写 Shell 脚本实现日程提醒功能和备忘录管理功能。 实验步骤 1. 基本操作 * 编辑备忘录文件 memo,实现日程安排功能。 * 编写 Shell 脚本 routine,实现日程提醒功能。 * 运行脚本 routine,...
而“MEMO:工作备忘录”可能是指一个专门存储此类信息的文件或系统,其中可能包括一系列与工作相关的Shell脚本、命令和技巧。 Shell,特别是Linux或Unix系统的Bash Shell,是命令行界面的交互式解释器,用户可以通过...
在这个项目中,我们可以看到开发者对备忘录功能的深入理解和独特应用,尤其是与Shell的结合,为我们提供了高效、便捷的笔记管理方式。 Shell,即Unix或Linux操作系统的命令行接口,以其强大的命令处理能力和自动化...
备忘录(Memo)通常指的是记录和管理日常事务的文本文件或应用程序,而在这个上下文中,"备忘录"可能是指一个Shell脚本或者一个用于处理Shell脚本的项目。"memo-master"可能是一个开源项目的名称,专门用于管理和...
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是一个压缩包,其中包含了与PowerShell相关的示例和备忘录,这可能是为了帮助用户理解和应用PowerShell在C#编程以及Exchange服务器管理中的功能。PowerShell是一种强大的命令行工具,由...
文件夹备忘录 doc / install:放置有关项目的安装doc doc / man:放置manuel doc 出/仓放置临时调试输出仓 工具放置工具脚本..etc 第三/外地第三方组件/库 部署地点部署脚本 设计/资产放置设计资产 设计/文档位置...
可以使用shell脚本、Python、Perl或其他编程语言来自动化整个过程。脚本会读取数据文件,处理数据,然后调用Graphviz的命令行工具(如`dot`)来生成图形。生成的图像可以通过设置输出格式(如PNG、PDF或SVG)进行...
7. **部署脚本**:自动化部署的脚本,如Dockerfile或shell脚本,用于构建和发布应用程序。 在项目开发和维护过程中,确保所有这些文件的版本控制至关重要。使用Git等版本控制系统可以帮助跟踪代码更改,回滚到旧...
在“bash security cheatsheets”这个标签中,我们可以推断出该集合可能包含了一些关于Bash shell脚本安全方面的内容。Bash是Linux和Unix系统中广泛使用的命令行解释器,理解其安全最佳实践对于系统的安全性至关重要...
3. **行为型模式**:如策略(Strategy)、模板方法(Template Method)、观察者(Observer)、迭代器(Iterator)、访问者(Visitor)、命令(Command)、备忘录(Memento)、状态(State)、职责链(Chain of ...