Shell脚本速查手册
admin
2024-02-16 23:17:20
0

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 $ 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 个技巧

相关内容

热门资讯

开心星星球里甜心超人魔方玩了4... 开心星星球里甜心超人魔方玩了4秒是哪一集39集,新人。。。第四部《甜心超人的新爱好》
为什么会乐极生悲? 为什么会乐极生悲?从易经的观点看,任何事物都是相对立的。有生就有死,又高就有矮,有长久有段,同样,有...
一千零一夜中给国王讲故事的人是... 一千零一夜中给国王讲故事的人是谁山鲁佐德在《一千零一夜》中给萨桑王国国王讲故事的那位女性就是:萨桑王...
发生在别人身上是故事发生在自己... 发生在别人身上是故事发生在自己身上是事故是什么意思?这句话的意思是:友唯别人的经历或事件通常被视为故...
怎么判断一个人是否是精神病(狂... 怎么判断一个人是否是精神病(狂躁型)?看是不是很小很普通的事、甚至没有什么事,就大发脾气,做出各种过...
夜问丨天菩萨,“贵州省汤”竟然... 今日小暑,标志着盛夏的登场。这样的天气下,来上一口“贵州省汤”,你会不自觉感叹:天菩萨,怎么能这么鲜...
精酿“魔术师”沈高彬:让贵州风... 当精酿啤酒的醇厚撞上贵州风物的独特,会碰撞出怎样的味觉奇遇?在贵阳,曾是繁华都市调酒师的沈高彬,以匠...
有哪位朋友买过学而第一国学听读... 有哪位朋友买过学而第一国学听读机,好不好用是国内第一家做国学机的,产品,售后没得黑。国学机至今也有8...
女生说今天好热啊该怎么回复 女生说今天好热啊该怎么回复高情商回复如下:1、“你很热吗,那我给你讲个冷笑话中和一下吧,然后你就找个...
一家人过河的问题 一家人爸爸 ... 一家人过河的问题 一家人爸爸 妈妈 2儿子 2女儿 一个管家 一条狗爱因斯坦的智力题目得买7张票,宠...
作为强国一代的青年大学生,在宏... 作为强国一代的青年大学生,在宏伟壮阔的科技强国梦中应该有着怎样的使命和担当?作为强国一代的青年大学生...
催眠大师的电影里所用到的心理学... 催眠大师的电影里所用到的心理学常识和原理是什么?《催眠大师》的引导方式是瞬间催眠,在现实人群中只有少...
我是个什么样的人,谁能帮我分析... 我是个什么样的人,谁能帮我分析一下,谢谢了?自己是什么样的人,没有和你接触,没有和你交往过,肯定不会...
求桔子树的早期作品集 求桔子树的早期作品集《片段》《妖孽并出》《暗涌》《Ne me quitte pas》《左右之间》《我...
一个人一个世界 那两个人几个世... 一个人一个世界 那两个人几个世界?一个人一个世界,两个人也是一个世界,因为(另一个)是他喜欢的人,他...
巨魔盗贼PVP 怎么样? 巨魔盗贼PVP 怎么样?同上可以说没有优势~PVE还行~是要看种族天赋的~
云南盘鮈鱼能吃吗 云南盘鮈鱼能吃吗能吃啊,而且很好吃的。
急求一篇写初中生的校园故事作文... 急求一篇写初中生的校园故事作文(记叙文)在学校发生的,真实点急求一篇写初中生的校园故事作文(记叙文)...
安徽基础教育平台学生完成后教师... 安徽基础教育平台学生完成后教师怎么遴选视频?安徽基础教育平台学生完成后,教师怎么遴选视频可以根据一些...
有人知道这是个什么鸟吗? 有人知道这是个什么鸟吗?灰喜鹊…………+幼雏喜鹊,还很小,看起来都很脆弱幼雏很难变认,有点像灰喜雀幼...