Linux中阶教程:bash shell基础

这篇具有很好参考价值的文章主要介绍了Linux中阶教程:bash shell基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

输入输出

echo表示打印字符串;read表示获取用户输入;$用于引用变量。

# test1.sh  bash中用#进行单行注释
echo "input your name:"
read user_name
echo "hello $user_name"

其运行结果为

$ bash test1.sh 
input your name:    #为echo打印
laser               #为用户输入
hello laser

赋值和计算

bash中的运算符并没有什么特殊的,

运算符 说明
+-×/,% 加减乘除,求余;支持+=形式
**&&|| 乘方、关系与、或

但是,与常见编程语言不同的是,bash中的赋值和数学计算需要在(())中进行。且在双括号内,不必使用$来引用变量。但在双括号外,在将数值赋给变量时需要使用$

$ ((a=5+3))
$ b = $((a+3))        #双括号内是数值,需要用$
#一般在C语言中合法的表达式均可用于双括号内
$ echo $((a>b ? a:b))
11

条件判断

bash中,条件判断通过[[]]来实现。例如

$ [[ 3 -eq 5 ]] #3是否等于5
$ echo $?       #$? 表示上次计算的结果
1               #在bash中,0表示真,其他表示假

需要注意,在bash中,0表示真。其支持的条件判断运算符如下

整数比较 -eq -ne -gt -lt -ge -le
true条件 相等 不等 左>右 左<右 左>=右 左<=右
字符串比较 > < == !=, <> =~
true条件 左>右 左<右 相等 不等 左匹配右(正则表达式)

其中,字符串比较的是字典顺序。

文件比较 -nt -ot -ef
true条件 左比右新 左比右旧 左右相同
true条件2 左存在,右不存在 左不存在,右存在

此外,bash还支持文件属性的判断,就操作系统而言,这是必须的。但就编程语言而言,这种针对文件交互的功能属于进阶内容,故而放在后面。

现在关键是学会条件判断的控制结构,bash和其他语言一样,采用了if作为关键字,同时采用fi作为条件结构结束的关键字。距离如下

$ ((a=15))
$ ((b=20))
$ if [[ a -le b ]]; then
> echo $a   #如果a<b则打印a
> else
> echo $b   #否则打印b
> fi
15

除了使用[[]]之外,还可通过test或者[],但适用范围有限,初学者只需掌握[[]]

函数

在编程语言中,函数的重要性是不言而喻的。在bash中,创建函数也十分简单,基本格式为

func(){
    # 传入参数用$1...$9表示
    return ...  #如果无返回值则不用return
}

其中func可换成函数的名称。在bash中,提供了一些有关函数的内置$参量,$1~$9可表示传入的参数,当参数位置大于10的时候,需写成类似${10}的形式。

由于已经讲解了判断表达式,故而下面就可以实现一个递归的阶乘函数了

#!/bin/bash
fac(){
    x=$1
    if [[ ${x} -eq 1 ]];then
        echo "1"
    else
        echo "$[$x * $(fac $[$x-1])]"
    fi
}

res=$(fac $1)
echo "$1的阶乘是:${res}"

$表达式还有如下用法

$# 参数个数
$* 显示所有参数
$@ 显示所有参数,但使用时加引号,并在引号中返回每个参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 最后命令的退出状态,0表示无错误。

for 循环

在bash中,除了if else之外,还有case可用于条件选择。但对初学者而言,不必贪多,故而将学习case的优先级下调。

循环也是一样,尽管支持for、while、until等结构,但暂且放在后面,在此只需讲解最易理解的C语言风格的for循环。

其完整的结构是for do done

for ((i = 0 ; i <= 1000 ; i++)); do
  echo "Counter: $i"
done

其中,(())也可以理解为此前提到过的赋值与数学计算。而且不出意外地,bash中也同样支持continuebreak,前者可跳过当前的循环,后者可跳出循环。

bash中,其他循环结构同样是用do...done来规定循环区域。且当dofor等关键字在同一行时,需要用;隔开,如果另起一行,则不必写分号。

数组及其遍历

bash中,圆括号除了可以用于创建局部的shell,还可以用于构建数组。

$ arr=(A B "C" D)
$ echo $arr
A
$ echo ${arr[1]}
B
$ echo ${arr[*]}    #获取全部数组元素
A B C D

通过for…in语句,可以遍历数组,但需要注意,数组在被遍历时要通过@所以。

$ for var in "${arr[@]}"
> do
> echo $var
> done
A
B
C
D

此外,for循环还有更加便捷的遍历方案

$ for i in 1 2 3 4 5
> do
> echo $i
> done
1
2
3
4
5

其他控制语句

whileuntil在语法规则上是完全相同的,而在语义上则是完全相反的。前者执行到条件为false为止,后者则执行到条件为true为止。

a=0
# 下面的例子将打印从0到10的自然数
until [[ $a -gt 10 ]]
    do
    echo $a
    a=$((a+1))
    done

最后,bash还提供了多选语句,case…esac,其应用逻辑与switch case相同,具体示例如下

echo 'input a number:'
read num
case $num in
    1)  echo 'you input 1'
    ;;
    2)  echo 'you input 2'
    ;;
    *)  echo 'you input others'
    ;;
esac

其中,1), 2)表示出现的情况,;;相当于break,用以跳出case

至此便掌握了bash作为一门语言的基本语法。文章来源地址https://www.toymoban.com/news/detail-735937.html

到了这里,关于Linux中阶教程:bash shell基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【socket】从计算机网络基础到socket编程——Windows && Linux C语言 + Python实现(TCP+UDP)

    简单讲一下基础知识,便于后面代码的理解,建议大概浏览一下这一小节内容。这里讲的只是冰山一角,建议大家学习计算机网络相关知识,推荐几本书: 《计算机网络》(谢希仁) 《计算机网络 自顶向下方法》 《计算机网络技术》 《计算机网络基础及应用》 《Linux C从入

    2024年02月08日
    浏览(60)
  • Linux之shell编程(BASH)

    Kernel Linux内核主要是为了和硬件打交道 Shell 命令解释器(command interperter) Shell是一个用C语言编写的程序,他是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。 Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核

    2024年01月18日
    浏览(39)
  • 在HBase中执行查询操作通常使用HBase Shell或编程语言API(如Java或Python)来执行

    在HBase中执行查询操作通常使用HBase Shell或编程语言API(如Java或Python)来执行。以下是使用HBase Shell进行查询的一些示例: 单行查询:获取指定行键的数据。 扫描表:按行范围获取表中的多个行的数据。 过滤器查询:使用过滤器指定查询条件来获取数据。 列族查询:获取指

    2024年01月21日
    浏览(47)
  • 【Linux | Shell】bash shell 基础命令

    很多 Linux 发行版的默认 shell 是 GNU bash shell。本文将介绍 bash shell 的基本特性,比如 bash 手册、命令行补全以及如何显示文件内容等。 GNU bash shell 是一个程序,提供了对 Linux 系统的交互式访问。它是作为普通程序运行的,通常是在用户登录终端时启动。系统启动的 shell 程序

    2024年02月11日
    浏览(64)
  • 模拟计算器编程教程,中文编程开发语言工具编程实例

    模拟计算器编程教程,中文编程开发语言工具编程实例 中文编程系统化教程,不需英语基础。学习链接 ​​​​​​https://edu.csdn.net/course/detail/39036 课程安排:初级1 1  初级概述 2  熟悉构件取值赋值 3 折叠式菜单滑动面板编程 4 自定义图形窗口自定义标题栏编程 5 多行文本

    2024年02月08日
    浏览(67)
  • 基础汇编语言编程

    目录 什么是汇编语言? 工程搭建 新建工程 环境设置  测试是否成功  正式学习汇编语言 数据处理指令 填充,加,减,乘  思考:我们可以看到R0寄存器可以存放8位十六进制数,那么0x12345678能不能用mov存入? 与,或,异或,左移,右移 思考:UART通信过程中为什么数据位规

    2024年02月08日
    浏览(39)
  • FPGA基础知识-编程语言接口

    目录 学习目标: 学习内容: 1.PLI的使用 2.PLI任务的连接和调用 3.内部数据的获取 4.PLI库子程序 学习时间: 学习产出: 解释在Verilog仿真中如何使用PLI子程序。 描述PLI的用途。 定义用户自定义系统任务和函数以及用户自定义C子程序。 理解用户自定义系统任务的连接和调用。

    2024年02月11日
    浏览(38)
  • Go语言编程教程-基本数据类型

    了解布尔类型 了解整数类型 了解浮点数类型 了解复数类型 了解字符串类型 了解字符类型 类型 名称 取值范围 说明 bool 布尔类型 true 或 false 默认值为 false 类型 名称 取值范围 说明 uint8 8位无符号整型 0 ~ 255 uint16 16位无符号整型 0 ~ 65535 uint32 32位无符号整型 0 ~ 4294967295 uint6

    2024年02月04日
    浏览(170)
  • 云原生时代崛起的编程语言Go基础实战

    @ 目录 概述 定义 使用场景 Go 安全 使用须知 搜索工具 Go基础命令 标准库 基础语法 Effective Go 概览 命名规范 注释 变量 常量(const) 控制结构 数据类型 迭代(range) 函数 指针 字符串和符文 结构体(struct) 方法 接口(interface) 泛型 错误(errors) 恐慌(pinic) 推迟(defer) 恢复(

    2024年02月01日
    浏览(61)
  • 【计算机编程语言】HTML-前端基础知识

    学习网站:https://jquery.cuishifeng.cn/index.html HTML5+CSS3 1.1什么是HTML Hyper Text Markup Language - (超文本标记语言) 超文本:文字、图片、音频、视频、动画等 W3C:World Wide Web Consortium - 万维网联盟 - 中立性技术标准机构 W3C标准 结构 化标准语言(HTML、XML) 表现 标准语言(CSS) 行为

    2024年02月15日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包