Shell脚本速查手册
Bash 脚本基础
定义变量
定义变量:name=value 需要注意,等号两侧不能有空格;
定义局部变量:local name=value;
定义只读变量:readonly name;
删除变量:unset name。
定义数组
定义数组:
myArray=(value0 value1 value2)
使用数组:
${数组名[下标]}
获取数组所有元素:
${数组名[*]} 或者
${数组名[@]}
获取数组长度
${#array_name[@]} 或者
${#array_name[*]}
运算符
关系运算符
-eq 检测两个数是否相等,相等返回true;
-ne 检测两个数是否不想等,不相等返回true;
-ge 检测左边的数是否大于右边的,如果是,则返回true;
字符串运算符
= 检测两个字符串是否相等,相等返回true;
!= 检测两个字符串是否不相等,不相等返回true;
-z 检测字符串长度是否为0,为0返回true;
-n 检测字符串长度是否不为0,不为0,则返回true;
$ 检测字符串是否为空,不为空返回true。
脚本控制流程
if 控制
if condition
thencommand;
fi
if else 控制
if condition
thencommand;
elsecommand;
fi
if-else-if-else控制
if condition1
then command1
elif condition2
thencommand2
elsecommandN
fi
For循环
for var in item1..itemN
docommand
done
While循环
while condition
do command
done
Until循环
until condition
docommand
done
Case(Switch)控制
case 值 in
value1)command1;;
value2)command2;;
esac
Bash 脚本进阶
定义函数
[function] funname [()]
{action;[return int;]
}
其中
- funtion 关键词可带可不带;
- funname 根据实际需要定义;
- return int 根据需要加入。
函数参数
- 调用函数传递的参数可以在函数中以 $1的方式获取;
- 使用$1的方式仅可用于前10个参数;
特殊参数
- $0 文件名;
- $# 传递到脚本和函数的参数个数;
- $* 以一个单字符串显示所有向脚本传递的参数;
- $$ 脚本允许的当前进程ID号;
- $? 显示最后命令退出状态,0表示没有错误,其他任何值表明有错误。
文件包含
文件包含
# 写法1
. filename # 注意点号和文件名中间有空格
# 写法2
source filename
Base 脚本编写常用命令
以下是编写Bash脚本的常用命令,你可以根据自己的需要进行选择。
sort
sort 命令是用例对内容进行排序的,可以将文本、数字进行排序。
- sort path/to/file 对文件内容进行升序排序;
- sort --unique path/to/file 对文件内容进行唯一排序;
echo
echo 命令是用来输出内容的。
- echo “my path is $PATH” 输出包含环境变量的信息;
- echo “hello world” >> {{file.txt}} 在文件尾部追加内容;
read
read 命令是用来获取用户输入内容,即标准输入设备(键盘)输入的内容。
read -a arrayname 把单词清单读入arrayname的数组里;
read -p “Enter your input here:\n” $variable 提示,并读入数据设置给变量;
while read line;do echo “$line”;done 按行读取内容,并执行命令;
mapfile
从标准输入读取行并赋值到数组。
-t 表示移除尾随行分隔符,默认是换行符
既然是读取标准输入,常见的就有以下几种读取形式:
$ mapfile myarr <alpha.log # 1.输入重定向
$ mapfile myarr < <(cat alpha.log) # 2.进程替换
shift
shift 命令可以用于将函数得参数移除,其他参数向前移动。
getopts
getopts 命令是一个内置变量,一般用在循环中。每当执行循环时,getopts都会检查下一个命令选项,如果这些选项出现在option中,则表示是合法选项,否则不是合法选项。并将这些合法选项保存在VARIABLE这个变量中。比如:
while getopts ":co" opt; docase "$opt" in"c")echo "command1";;"o")echo "command2";;"*")echo "other command";;esac
done
sed
基本用法:sed + 选项 + “指令” 文件
-i 表示直接对内容进行修改,不加 i 时默认只是预览,不会对文件进行实际修改
-n 表示取消默认输出,sed默认会输出所有文本内容,使用 -n 参数后只显示处理过的行
--打印1到5行
sed -n '1,5p' 1.txt
other
${variable:?} 表示检验变量是否为空
eval也可以用于回显简单变量,不一定时复杂变量。如 test.txt内容:hello shell world!
myfile="cat test.txt"
eval echo $myfile #result:hello shell world!
Base 脚本调试
1、启用 Shell 脚本调试模式的方法
下面是主要的 Shell 脚本调试选项:
-v
(verbose 的简称) - 告诉 Shell 读取脚本时显示所有行,激活详细模式。-n
(noexec 或 no ecxecution 简称) - 指示 Shell 读取所有命令然而不执行它们,这个选项激活语法检查模式。-x
(xtrace 或 execution trace 简称) - 告诉 Shell 在终端显示所有执行的命令和它们的参数。 这个选项是启用 Shell 跟踪模式。
第一个机制是改变 Shell 脚本首行,如下,这会启动脚本调试。
#!/bin/sh 选项
其中, 选项可以是上面提到的一个或多个调试选项。
第二个是使用如下调试选项启动 Shell,这个方法也会打开整个脚本调试。
$ shell 选项 参数1 ... 参数N
第三个方法是使用内置命令 set
去调试一个给定的 Shell 脚本部分,如一个函数。这个机制是重要的,因为它让我们可以去调试任何一段 Shell 脚本。
启用调试模式:
$ set -选项
禁用调试模式:
$ set +选项
比如:
#!/bin/bash
#script to print brief system info
ROOT_ID="0"
DATE=`date`
NO_USERS=`who | wc -l`
UPTIME=`uptime`
check_root(){if [ "$UID" -eq "$ROOT_ID" ]; thenecho "You are not allowed to execute this program!"exit 1;fi
}
#turning on and off debugging of check_root function
set -x ; check_root; set +x ;
推荐阅读
如何入门 Bash 编程
编写更好 Bash 脚本的 8 个建议
Linux 中高效编写 Bash 脚本的 10 个技巧
Shell脚本速查手册相关推荐
- 给运维工程师的Cheatsheets! 《Shell脚本速查手册》免费下!
简介:Shell 作为 Linux 中的第一语言,几乎每一个使用 Linux 的人都用到或用过 Shell,但绝大多数人都并不能掌握 Shell 编程的基本能力和技巧. 2021 年,阿里云开发者学堂 ...
- linux常用命令速查手册PDF下载
Linux常用命令速查手册 需要该PDF文档的朋友扫码关注下方二维码[入门小站],后台回复 「1001」 自取 点击下面标题即可获取对应资料 LeetCode刷题开源手册 LeetCode题解[jav ...
- linux常用命令速查手册
Linux常用命令速查手册 需要该PDF文档的朋友扫码关注下方二维码[入门小站],后台回复 「1001」 自取 点击下面标题即可获取对应资料 LeetCode刷题开源手册 LeetCode题解[jav ...
- 极客的Linux常用命令速查手册
Linux常用命令速查手册 1.1 写在前面的话 1.2 Linux 常用命令速查手册 1.2.1 mkdir创建一个文件夹 1.2.2 cd进入一个文件夹 1.2.3 rmdir删除一个文件夹 1. ...
- 生信人的自我修养:Linux 命令速查手册
标题:生信人的自我修养:Linux 命令速查手册 目标:致力于为生信人打造一个完整的 Linux 命令速查手册 作者:简佐义(jianzuoyi@qq.com) 版本:1.0 日期:2020-11-2 ...
- Linux命令行命令速查手册(整理)
Linux命令行命令速查手册 [作者原创]Jan [ls] 2017-02-09 ls命令会列出当前所在目录的内容 2017-02-09 ls music 注 想要看看music目录中有什么内容,那么 ...
- 【收藏】Linux系统常用命令速查手册(附赠PDF档)
给大家收集整理了日常常用的Linux系统命令,仅供大家参考. 大家如果觉得文章看起来不太方便,获取<Linux系统常用命令速查手册>.PDF版. 联系小姐姐,备注"liunx命令 ...
- 【收藏】Linux系统常用命令速查手册(附PDF下载链接)
给大家收集整理了日常常用的Linux系统命令,仅供大家参考. 大家如果觉得文章看起来不太方便,可以在+qq. 2 3 5 53 3 1 0 4 6 备注"liunx命令",即可获取 ...
- Linux命令速查手册
一. 启动,关机,登入,登出相关命令 <login> 登录 <logout> 登出 <exit> 登出 <shutdown> 停止系统 <halt ...
最新文章
- ionic app 开发和生产环境的配置
- 已知3个坐标点xy画圆弧_这25张图片,让你彻底看懂25个复杂的数学公式!
- linux命令录制,怎样在Linux上录制你的终端操作及回放
- 高德地图:地理/逆地理编码
- matlab中图像读写
- pdf阅读器下载支持win7_福昕PDF阅读器(Foxit Reader)下载|福昕PDF阅读器(Foxit Reader) 9.6.1.25160 官方版...
- 张正友摄像机标定的研究(MATLAB+OpenCV)
- 佳能各系列数码相机特点简述
- 深度学习笔记(32) 目标定位
- 数据仓库、数据集市、数据湖、数据中台到底有什么区别?
- 对“优秀工程师”的一点感悟
- html入门的常见问题
- Q3DSurface 配置使用教程
- php doc生成pdf文件怎么打开乱码,phpexcel 导出pdf文件乱码,该如何解决
- 流程管理体系实施策略
- 基于JAVA的疫情学生宿舍管理系统【数据库设计、论文、源码、开题报告】
- 重新定义团队 谷歌的自由精神对所有公司都适用
- python爬取实习僧招聘信息字体反爬
- 大整数的加减乘除运算
- CO2/MAG/MIG焊接机(碳钢和不锈钢脉冲)
热门文章
- 物联网卡和流量卡相比哪个信号强
- BootDo架构-基于 Springboot 和 Mybatis 的后台管理系统
- html [JS]随机密码生成[运维工具]
- Oracle连接不上解决办法合集
- 世界经济论坛报告:全方位评估Fintech将如何颠覆金融业竞争格局,包括路径、模式和终局(二)...
- 【neon加速拆分/合并交叉数据】使用neon intrinsics加速合并/拆分uv的内存分布(交叉存储/分别存储)
- android p 预览版壁纸,Android P预览版加入黑暗模式主题 iOS啥时候才能有呢?
- 企业微信客户朋友圈怎么发?朋友圈规则有哪些?
- 基于SAR影像的鱼塘提取
- psd格式图片一键切图