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脚本速查手册相关推荐

  1. 给运维工程师的Cheatsheets! 《Shell脚本速查手册》免费下!

    简介:Shell 作为 Linux 中的第一语言,几乎每一个使用 Linux 的人都用到或用过 Shell,但绝大多数人都并不能掌握 Shell 编程的基本能力和技巧. 2021 年,阿里云开发者学堂 ...

  2. linux常用命令速查手册PDF下载

    Linux常用命令速查手册 需要该PDF文档的朋友扫码关注下方二维码[入门小站],后台回复 「1001」 自取 点击下面标题即可获取对应资料 LeetCode刷题开源手册 LeetCode题解[jav ...

  3. linux常用命令速查手册

    Linux常用命令速查手册 需要该PDF文档的朋友扫码关注下方二维码[入门小站],后台回复 「1001」 自取 点击下面标题即可获取对应资料 LeetCode刷题开源手册 LeetCode题解[jav ...

  4. 极客的Linux常用命令速查手册

    Linux常用命令速查手册 1.1 写在前面的话 1.2 Linux 常用命令速查手册 1.2.1 mkdir创建一个文件夹 1.2.2 cd进入一个文件夹 1.2.3 rmdir删除一个文件夹 1. ...

  5. 生信人的自我修养:Linux 命令速查手册

    标题:生信人的自我修养:Linux 命令速查手册 目标:致力于为生信人打造一个完整的 Linux 命令速查手册 作者:简佐义(jianzuoyi@qq.com) 版本:1.0 日期:2020-11-2 ...

  6. Linux命令行命令速查手册(整理)

    Linux命令行命令速查手册 [作者原创]Jan [ls] 2017-02-09 ls命令会列出当前所在目录的内容 2017-02-09 ls music 注 想要看看music目录中有什么内容,那么 ...

  7. 【收藏】Linux系统常用命令速查手册(附赠PDF档)

    给大家收集整理了日常常用的Linux系统命令,仅供大家参考. 大家如果觉得文章看起来不太方便,获取<Linux系统常用命令速查手册>.PDF版. 联系小姐姐,备注"liunx命令 ...

  8. 【收藏】Linux系统常用命令速查手册(附PDF下载链接)

    给大家收集整理了日常常用的Linux系统命令,仅供大家参考. 大家如果觉得文章看起来不太方便,可以在+qq. 2 3 5 53 3 1 0 4 6 备注"liunx命令",即可获取 ...

  9. Linux命令速查手册

    一. 启动,关机,登入,登出相关命令 <login> 登录 <logout> 登出 <exit> 登出 <shutdown> 停止系统 <halt ...

最新文章

  1. ionic app 开发和生产环境的配置
  2. 已知3个坐标点xy画圆弧_这25张图片,让你彻底看懂25个复杂的数学公式!
  3. linux命令录制,怎样在Linux上录制你的终端操作及回放
  4. 高德地图:地理/逆地理编码
  5. matlab中图像读写
  6. pdf阅读器下载支持win7_福昕PDF阅读器(Foxit Reader)下载|福昕PDF阅读器(Foxit Reader) 9.6.1.25160 官方版...
  7. 张正友摄像机标定的研究(MATLAB+OpenCV)
  8. 佳能各系列数码相机特点简述
  9. 深度学习笔记(32) 目标定位
  10. 数据仓库、数据集市、数据湖、数据中台到底有什么区别?
  11. 对“优秀工程师”的一点感悟
  12. html入门的常见问题
  13. Q3DSurface 配置使用教程
  14. php doc生成pdf文件怎么打开乱码,phpexcel 导出pdf文件乱码,该如何解决
  15. 流程管理体系实施策略
  16. 基于JAVA的疫情学生宿舍管理系统【数据库设计、论文、源码、开题报告】
  17. 重新定义团队 谷歌的自由精神对所有公司都适用
  18. python爬取实习僧招聘信息字体反爬
  19. 大整数的加减乘除运算
  20. CO2/MAG/MIG焊接机(碳钢和不锈钢脉冲)

热门文章

  1. 物联网卡和流量卡相比哪个信号强
  2. BootDo架构-基于 Springboot 和 Mybatis 的后台管理系统
  3. html [JS]随机密码生成[运维工具]
  4. Oracle连接不上解决办法合集
  5. 世界经济论坛报告:全方位评估Fintech将如何颠覆金融业竞争格局,包括路径、模式和终局(二)...
  6. 【neon加速拆分/合并交叉数据】使用neon intrinsics加速合并/拆分uv的内存分布(交叉存储/分别存储)
  7. android p 预览版壁纸,Android P预览版加入黑暗模式主题 iOS啥时候才能有呢?
  8. 企业微信客户朋友圈怎么发?朋友圈规则有哪些?
  9. 基于SAR影像的鱼塘提取
  10. psd格式图片一键切图