1.1.1. 获取数组中的所有元素****
使用@ 或 * 可以获取数组中的所有元素,例如:
test33.sh
| #!/bin/bashmy_array [ 0 ]="A"my_array [ 1 ]="B"my_array [ 2 ]="C"my_array [ 3 ]="D" echo "数组的元素为: {my_array[@]}" |
|---|
执行脚本,输出结果如下所示:
| ./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[@]}" |
|---|
执行脚本,输出结果如下所示:
| ./test.sh 数组元素个数为: 4数组元素个数为: 4 |
|---|
1.1.3. 遍历数组****
1.1.3.1. 方式一****
test35.sh
| #!/bin/bash my_arr**=(** AA BB CC ) for var in 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 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