专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

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. 复用 代码扩展性更强

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

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

IT问答
小编:小易整编
相关文章相关阅读
  • 什么是Linux系统中nc命令?nc命令的用法详解

    什么是Linux系统中nc命令?nc命令的用法详解

    这篇文章主要介绍了linux系统中nc命令的基本用法,nc命令非常之强大,这里先简单介绍它用来作端口扫描以及文件传输等的基础使用。功能说明:功能强大的网络工具,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小...

  • linux怎么判断pcre是否安装

    linux怎么判断pcre是否安装

    在linux中,可以利用“rpm-qapcre”命令判断pcre是否安装;rpm命令专门用于管理各项套件,使用该命令后,若结果中出现pcre的版本信息,则表示pcre已经安装,若没有出现版本信息,则表示没有安装pcre。本教程操作环境:...

  • linux中lib指的是什么

    linux中lib指的是什么

    在linux中,lib是库文件目录,包含了所有对系统有用的库文件;库文件是应用程序、命令或进程正确执行所需要的文件。几乎所有的应用程序都需要使用位于lib目录中的共享库文件,lib的功能类似于Windows中的DLL文件。lib是Lib...

  • Python服务器编程:使用PyAudio进行音频处理

    Python服务器编程:使用PyAudio进行音频处理

    python是一种功能强大的编程语言,可以用于从简单的脚本到复杂的应用程序和服务器。pyaudio是python中一种流行的音频处理库,可以用于录制、播放和处理音频数据。在本文中,我们将探讨如何使用PyAudio来开发一个Python服务器...

  • linux umask是什么

    linux umask是什么

    umask是linux中的一个命令,用于为用户文件创建权限掩码,语法“umask[-s][权限掩码]”;其中,“权限掩码”是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。本教程操作环境:linux...

  • linux命令ls是什么意思

    linux命令ls是什么意思

    在linux中,ls全称“list”,中文意思为“列表”,其主要功能是显示指定工作目录下的内容(列出工作目录所含之文件及子目录),也可以查看文件权限,语法“ls[选项]目录名称”。当ls命令不使用任何选项时,默认只会显示非隐藏文件的名称...

  • linux openssl是什么

    linux openssl是什么

    在linux中,openssl是一个功能极其强大的命令行工具,可以用来完成公钥体系及https相关的很多任务。openssl有两种运行模式:交互模式和批处理模式;直接输入openssl回车进入交互模式,输入带命令选项的openssl进入批处...

  • linux怎么解压文件

    linux怎么解压文件

    一、zip格式zip可能是目前使用的最多的文档压缩格式。它最大的优点就是在不同的操作系统平台上使用。缺点就是支持的压缩率不是很高,而tar.gz和tar.bz2在压缩率方面做得非常好。我们可以使用下列的命令压缩一个文件:zip-rarc...

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

精彩推荐