专业编程基础技术教程

网站首页 > 基础教程 正文

Linux 之 bash 编程 linux bash-4.1

ccvgpt 2024-10-12 14:08:26 基础教程 10 ℃

刚刚接触Linux的时候可能会混淆一个概念:shell与bash,这两者之间的关系也都是模模糊糊的,使用Windows系统的人可能对shell没啥感觉,因为只需要点点鼠标,计算机就能安装我们的需求进行相关的操作,那么为什么计算机就能设别我们的操作呢,人机有别,人的语言,机器怎么会懂呢,这时就需要一个翻译,将语言动作翻译给机器 ,shell就是充当人与计算机之间的翻译官。

在linux中图形界面不是很强,大部分都是通过命令进行系统控制,所以shell就是显得特别重要,来看看官方的定义

Linux 之 bash 编程 linux bash-4.1

 Unix shell:一种壳层与命令行界面,是Unix操作系统下传统的用户和计算机的交互界面。
 普通意	义上的shell就是可以接受用户输入命令的程序。它之所以被称作shell是因为它隐藏
 了操作系统低层的细节。Unix操作系统下的shell既是用户交互的界面,也是控制系统的脚本语言。	

bash是shell的一种,大多数Linux系统默认使用的shell,bash shell是Bourne shell 的一个免费版本,它是最早的Unix shell,bash还有一个特点,可以通过help命令来查看帮助。包含的功能几乎可以涵盖shell所具有的功能,所以一般的shell脚本都会指定它为执行路径。

csh是shell的另一种,C shell 使用的是“类C”语法,csh是具有C语言风格的一种shell,其内部命令有52个,较为庞大。目前使用的并不多,已经被/bin/tcsh所取代。

Korn是shell的另一种, Korn shell 的语法与Bourne shell相同,同时具备了C shell的易用特点。许多安装脚本都使用ksh,ksh 有42条内部命令,与bash相比有一定的限制性。

? 变量

#= 左右不要有空格
a=1
b=seveniruby
d="hello from testerhome"
#如果内容有空格,需要使单引号或者双引号
e='hello from "bash学习" '
 #双引号支持转义 $开头的变量会被自动替换

双引号用于括起一段字符串值,支持$var形式的变量替换

单引号也表示其内容是字符串值,不支持转义

$’\n’ ANSI-C 引用

\ 反斜线,某些情况下表示转义

((a=a+3)) 是整数扩展。把里面的变量当作整数去处理

$(ls) 执行命令并把结果保存为变量 简写为``

变量类型

布尔 true false

数组 array=(a b c)

函数 foo() { echo hello world }

字符串操作

取值

${value:offset} ${value:offset:length} 从变量中提取字符串

${#array[*]}和${#array[@]}表示数组中元素的个数


掐头去尾与内容替换

${value#pattern} ${value##pattern} pattern} #表示掐头

${value%pattern} ${value%%pattern} %表示去尾

${value/pattern/string} ${value//pattern/string} /替换

#与## %与%% /与//的区别:最短匹配模式VS最长匹配模式

${var/#Pattern/Replacement} ${var/%Pattern/Replacement}

AWK可以替代这些操作,推荐使用AWK

算术判断

? [ 2 –eq 2 ] 相等

? [ 2 –ne 2 ] 不等

? [ 3 –gt 1 ] 大于

? [ 3 –ge 3 ] 大于等于

? [ 3 –lt 4 ] 小于

? [ 3 –le 3 ] 小于等于

(())也可以表示算术比较。 ((10>=8)) ,((10==10)),
字符串比较

[ string1 = string2 ] 如果两字符串相同,则结果为真

[ string1 != string2 ] 如果两字符串不相同,则结果为真

[ -n "$var" ] 如果字符串不是空,则结果为真

[ -z "$var" ] 如果字符串是空,则结果为真

[[ "xxxx" == x* ]] 在表达式中表示0或者多个字符

[[ xxx == x?? ]] 在表达式中表示单个字符

? 逻辑控制

条件 if, 分支case select ,循环 for while until,break 和continue

if结构的语句如下

if [ condition ] ; then …;fi
if [ condition ] ; then …;else …;fi

简单的逻辑可以使? && || 去替代

for循环

for(( c1 ; c2 ; c3 ));
do

...;

done

for((i=0;i<10;i++));do echo $i;done


For 循环遍历

用于递归数组,还可以递归以空格隔开的字符串序列。或者是某个命令的返回值

for f in $array[*]; do
....

done

退出控制

return 函数返回

exit 脚本进程退出

break 退出当前循环

continue 跳过当前的循环,进入下次循环。

Tags:

最近发表
标签列表