十六. [博学谷学习记录]|超强总结,用心分享|大数据 Linux(十六)

113 阅读1分钟

1.1.1. 获取数组中的所有元素****

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

test33.sh

 

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

 

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

chmod+xtest33.sh chmod +x test33.sh ./test.sh 数组的元素为: A B C D数组的元素为: A B C D

 

1.1.2. 获取数组的长度****

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

test34.sh

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

 

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

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

 

1.1.3. 遍历数组****

1.1.3.1. 方式一****

test35.sh

#!/bin/bash my_arr**=(** AA BB CC ) for var in myarr[]do  echo {my_arr[*]}**do**  **echo**  **var**done

 

1.1.3.2. 方式二****

test36.sh

#!/bin/bash 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

 

1.1. select****

1.1.1. 简介****

select表达式是bash的一种扩展应用,擅长于交互式场合。用户可以从一组不同的值中进行选择:

select var in ... ;do commonddone.... now $var can be used ...

 

注意:****

select 是个无限循环,因此要记住用 break 命令退出循环,或用exit 命令终止脚本

1.1.2. 实例****

下面是一个简单的示例:

test37.sh

#!/bin/bash echo "What is your favourite OS?"PS3**=**"Please enter your choice:"select var in "Linux" "Gnu Hurd" "Free BSD" "Other"do****  break ;doneecho "You have selected $var"

 

这里PS3作为select语句的shell界面提示符,注意:PS3一定要定义在select语句的前面 该脚本的运行结果如下:

What is your favourite OS?1) Linux2) Gnu Hurd3) Free BSD4) OtherPlease enter your choice:3You have selected Free BSD

1.1.1. select和case的综合练习****

test38.sh

#!/bin/bashecho "你想学习什么语言?"PS3**="请输入你的选择:"    # 设置提示字符串select** var in java c++ shell pythondo  case  **var** **in**     "java" **)**       **echo** "恭喜你选择成功.java最牛"      **;;**     "c++" **)**       **echo** "驱动开发  网络优化  go 语言"      **;;**     "shell" **)**       **echo** "运维必会"      **;;**     **python** **)**       **echo** "人工智能"     **esac**     **break**    # 如果这里没有break 将会进行无限循环**done****echo** "你选择的是:var"

 

1.1. 加载其它文件的变量****

1.1.1. 简介****

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

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

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

 

1.1.2. 练习****

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

第一步: vim demo1.sh

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

 

第二步: vim demo2.sh

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

 

第三步: 执行demo2.sh

sh demo2.sh

 

好处 :

​ 1. 数据源和业务处理分离

​ 2. 复用代码扩展性更强

1.1. shell脚本综合案例

1.1.1. 猜字游戏

1.1.1.1. 规则

游戏规则为:程序内置一个1到100 之间的数字作为猜测的结果,由用户猜测此数字。用户每猜测一次,由系统提示猜测结果:大了、小了或者猜对了;直到用户猜对结果,则提示游戏结束。

1.1.1.2. 代码

guess_number.sh