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
then
  command;
fi  

if else 控制

if condition
then
   command;
else
   command;
fi   

if-else-if-else控制

if condition1
then 
   command1
elif condition2
then
   command2
else
   commandN
fi

For循环

for var in item1..itemN 
do
   command
done

While循环

while condition
do 
   command
done

Until循环

until condition
do
  command
done

Case(Switch)控制

casein
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; do
  case "$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" ]; then
    echo "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 个技巧

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值