Shell脚本速查手册

编程入门 行业动态 更新时间:2024-10-10 10:22:49

Shell<a href=https://www.elefans.com/category/jswz/34/1771291.html style=脚本速查手册"/>

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脚本速查手册

本文发布于:2023-06-28 07:07:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/923608.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:脚本   速查手册   Shell

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!