专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

shell编程教程,Linux Shell编程教程详细介绍

来源:小易整编  作者:小易  发布时间:2023-03-21 11:40
摘要:shell编程教程,LinuxShell编程教程详细介绍一、Shell编程1.简介Shell是一个用C语言编写的程序,通过Shell用户可以访问操作系统内核服务。Shell既是一种命令语言,又是一种程序设计语言。Shellscript是一种...
echo '输入 1 到 4 之间的数字:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

输入不同的内容,会有不同的结果,例如:

输入 1 到 4 之间的数字:
你输入的数字为:
3
你选择了 3

6) 跳出循环

在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell 使用两个命令来实现该功能:break 和 continue。

break命令

break 命令允许跳出所有循环(终止执行后面的所有循环)。

需求: 执行死循环 每隔1秒打印当前时间, 执行10次停止
#!/bin/bash
# 需求: 执行死循环 每隔1秒打印当前时间, 执行10次停止
i=0;
while true; do
        sleep 1
        echo $i `date +"%Y-%m-%d %H:%M:%S"`
        i=$[ i + 1]
        if [ $i -eq 10 ]; then
                break
        fi
done
continue

continue 命令与 break 命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

需求: 打印 1~30, 注意 跳过3的倍数
#!/bin/bash
# 需求: 打印 1~30, 注意 跳过3的倍数
for i in {1..30}; do
        if test $[ i % 3 ] -eq 0; then
                continue
        fi
        echo $i
done

8. 函数使用

1) 函数的快速入门

  • 格式

    [ function ] funname()
    {
        action;
        [return int;]
    }
    • 可以带 function fun() 定义,也可以直接 fun() 定义,不带任何参数。
    • 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return 后跟数值 n(0-255)
  • 快速入门

    #!/bin/bash
    demoFun () {
        echo "这是我的第一个 shell 函数!"
    }
    echo "-----函数开始执行-----"
    demoFun
    echo "-----函数执行完毕-----"

2) 传递参数给函数

在 Shell 中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...

带参数的函数示例:

#!/bin/bash
funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

输出结果:

第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

另外,还有几个特殊字符用来处理参数:

参数处理说明
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数
$$脚本运行的当前进程 ID 号
$!后台运行的最后一个进程的 ID 号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-显示 Shell 使用的当前选项,与 set 命令功能相同。
$?显示最后命令的退出状态。0 表示没有错误,其他任何值表明有错误。

9. 数组

1) 定义数组

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(。

与大部分编程语言类似,数组元素的下标由 0 开始。

Shell 数组用括号来表示,元素用空格符号分割开,语法格式如下:

array_name=(value1 value2 value3 ... valuen)

实例
#!/bin/bash
my_array=(A B "C" D)
我们也可以使用下标来定义数组:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

2) 读取数组

读取数组元素值的一般格式是:

${array_name[index]}
实例
#!/bin/bash
my_array=(A B "C" D)
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"

执行脚本,输出结果如下所示:

$ chmod +x test.sh
$ ./test.sh
第一个元素为: A
第二个元素为: B
第三个元素为: C
第四个元素为: D
获取数组中的所有元素

使用@ 或 * 可以获取数组中的所有元素,例如:

#!/bin/bash
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"

执行脚本,输出结果如下所示:

$ chmod +x test.sh
$ ./test.sh
数组的元素为: A B C D
数组的元素为: A B C D
获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

#!/bin/bash
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"

执行脚本,输出结果如下所示:

$ chmod +x test.sh
$ ./test.sh
数组元素个数为: 4
数组元素个数为: 4

3) 遍历数组

方式一
#!/bin/bash
my_arr=(AA BB CC)
for var in ${my_arr[*]}
do
  echo $var
done
方式二
my_arr=(AA BB CC)
my_arr_num=${#my_arr[*]}
for((i=0;i<my_arr_num;i++));
do
  echo "-----------------------------"
  echo ${my_arr[$i]}
done

10) 加载其它文件的变量

简介

和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。

Shell 文件包含的语法格式如下:

. filename   # 注意点号(.)和文件名中间有一空格
或
source filename

练习

定义两个文件 test1.sh 和 test2.sh,在 test1 中定义一个变量arr=(java c++ shell),在 test2 中对arr进行循环打印输出。

第一步: vim test1.sh

#!/bin/bash
my_arr=(AA BB CC)

第二步: vim test2.sh

#!/bin/bash
source ./test1.sh  # 加载test1.sh 的文件内容
for var in ${my_arr[*]}
do
  echo $var
done

第三步: 执行 test2.sh

sh test2.sh

好处 :

  1. 数据源 和 业务处理 分离
  2. 复用 代码扩展性更强

本文地址:百科问答频道 https://www.neebe.cn/wenda/934422_3.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!

共3页 1 2 3 当前是最后一页

百科问答
小编:小易整编
相关文章相关阅读
  • LINUX虚拟化是什么意思?

    LINUX虚拟化是什么意思?

    Linux虚拟化是把一台PC上的Linux系统装到一个物理主机上,同时可以在同一台物理主机上运行多个操作系统,这样可以让数据中心或大型机器获得更大的效能和空间。虚拟化技术可以在物理机上虚拟出多台虚拟机,这样每台虚拟机上的Linux系统就不...

  • 代码编程是什么意思?

    代码编程是什么意思?

    代码编程是把一些有意义的指令(称为程序代码),以一种特定的语言编写成,让机器能够理解并执行的一种过程。程序代码被输入到计算机(或特定的计算设备)中,按照用户编写的指令执行操作,从而实现特定的功能。代码编程具有很多好处,因为它可以使我们有效...

  • 编程框架是什么意思?

    编程框架是什么意思?

    编程框架是一种软件开发工具,它提供标准的、灵活的编程架构,帮助开发者更快的开发软件系统。它提供了一系列可以用于构建应用程序的组件,它们之间具有良好的耦合性,能够帮助应用程序达到最优状态。通常来说,编程框架会集成很多开发工具,如:语言、数据...

  • 网页编程是什么意思?

    网页编程是什么意思?

    网页编程是一种通过使用编程语言创建网页的过程。它可以用来开发功能强大的网站,为用户提供完美的用户体验。通常使用编程语言的一个原因是它能够通过在浏览器之间传递指令来控制界面上的更新和数据变化,并更有效地构建网页。网页编程主要涉及到诸如HTM...

  • linux的hostname(主机名)修改详解

    linux的hostname(主机名)修改详解

    Linux操作系统的hostname是一个kernel变量,可以通过hostname命令来查看本机的hostname。也可以直接cat/proc/sys/kernel/hostname查看。#hostname#cat/proc/sys/...

  • linux入侵提权(服务器提权)方法

    linux入侵提权(服务器提权)方法

    利用mysqlroot提权方法mysql5.x里面引入了一个system函数,这个函数可以执行系统命令,当mysql以root登陆的时候,就可以利用这个函数执行命令,当然是在权限许可的范围内。一般我们按照常规思路,搞到mysql的ro...

  • 详解Linux中hdparm命令查看硬盘信息的用法

    详解Linux中hdparm命令查看硬盘信息的用法

    功能说明:显示与设定硬盘的参数。语  法:hdparm[-CfghiIqtTvyYZ][-a][-A][-c][-d][-k][-K][-m][-n...

  • fuser软件在Linux系统下的使用方法

    fuser软件在Linux系统下的使用方法

    在Linux中,fuser工具可用来查询文件的用户,除此之外,fuser还有很多用途,能够搭配参数使用,下面小编将针对fuser工具的使用方式给大家做个详细介绍,希望对你有所帮助。lsof也具备类似的功能,它也能够找出正在对指定文件访问的进...

  • 周排行
  • 月排行
  • 年排行

精彩推荐