微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux高级命令+Shell编程

@H_502_4@linux高级

目标

  • Linux高级命令

  • Shell编程

Linux高级命令

重定向命令

​ Linux 允许将命令执行结果重定向一个文件,本应显示在终端上的内容保存到指定文件中。如:ls >test.txt ( test.txt 如果不存在,则创建,存在则覆盖其内容 )。

应用场景: 将日志或者分析结果写入文件修改配置文件

# 一个 >
覆盖写入文件
echo 1 > test.log
# 两个 >>
追加数据到文件
echo 1 >> test.config

cut 命令

文件内容查看命令,类似于cat more less tail查看文件的命令,区别于提取静态文本或文本流中的文本列。

参数解释
-b按字节选取 忽略多字节字符边界
-c显示行中指定范围的字符
-d自定义分隔符,认为制表符 \t
-f与-d一起使用,指定显示哪个区域。field
-n与“-b”选项连用,不分割多字节字符;
–complement补足被选择的字节、字符或字段;
–out-delimiter=<字段分隔符>指定输出内容是的字段分割符;
–help显示指令的帮助信息;
–version显示指令的版本信息。
  • 创建文本 stu.txt

    id name age score
    01 tom 18 78
    02 jack 20 85
    03 bill 16 90
    04 mary 24 77
    05 anna 21 85
    
# 分割获取第一列
cut -d " " -f 1 stu.txt
解释:
 -d “ ” :用来指定文件字段之间的分隔符,如果文件的分隔符是制表符则不需要指定该参数
 -f  数字 :用来指定哪一列
# 打印除了第二列以外的列
cut -d " " -f 2 --complement stu.txt

# cut命令可以将一串字符作为列来显示,字符字段的记法:
# N-:从第N个字节、字符、字段到结尾;
# N-M:从第N个字节、字符、字段到第M个(包括M在内)字节、字符、字段;
# -M:从第1个字节、字符、字段到第M个(包括M在内)字节、字符、字段。
# 打印第1个到第3个字符
cut -c 1-4 stu.txt
#打印前2个字符:
cut -c 1-2 stu.txt    |  cut -c -2 stu.txt
#打印从第5个字符开始到结尾
cut -c 5- stu.txt

wc命令

  • wc命令:统计行数 单词数 字节数

  • 认的情况下,wc将计算指定文件的行数、字数以及字节数。

  • 用法 wc [-option] 文件名 option : l w m c

参数解释
-l统计行数
-c统计字节数
-w统计单词数
-m统计字符数
111
222 bbb
333 aaa bbb 
444 aaa bbb ccc
555 aaa bbb ccc ddd
666 aaa bbb ccc ddd eee
# 统计文件的行数、字节数、字数
wc test_wc.txt
# 第一个 6 是行数,21 代表单词,85代表字节数
#查看根目录下有多少单词
ll -h / | wc -w

注: 英文或者数字,一个字符就是一个字节,一个字节是8位,中文字符可能是2个字节,也可能是3个字节。

awk 命令

awk的介绍

awk是处理文本及文本分析的工具,保证文本是有格式的,认每行按照空格或者 /tab 分割。

读取输入文件、为数据排序、去重、数据分析和生成报表的数据等。

语法格式:

变量分配:

认情况下,awk 会将如下变量分配给它在文本行中发现的数据字段:

$0 代表整个文本行;

$1 代表文本行中的第 1 个数据字段;

$2 代表文本行中的第 2 个数据字段;

$n 代表文本行中的第 n 个数据字段。

print和printf 打印

print 输出 就是变量、数值和字符串

printf 类似 c语言的格式化输出

awk 的案例操作

  • 写入文本文件 test_awk.txt
aa 111 333
bbb 444 555
ccc 666 777 888
ddd 999 222 999
#显示文件中第1段
awk '{print $1}' test_awk.txt
awk -F ' ' '{print $1}' test_awk.txt
#显示文件中第1,2,3段
awk '{print $1,$2,$3}' test_awk.txt
#将输出内容用#号连接,输出前三列
awk '{print $1"#"$2"#"$3}' test_awk.txt
#用段之间的连接符 OFS 进行字段的连接输出
awk '{OFS="#"} {print $1,$2,$3}' test_awk.txt
  • 指定分隔符 文本文件中有可能

比如 1 \001张三 \001 25 \001 男 \001画画 读书 旅游 爬山

  • -F 来指定分隔符
#打印出test_awk2.txt的所有段
awk -F ':' '{print $0}' test_awk2.txt
#打印出test_awk2.txt的第1,3段
awk -F ':' '{print $1,$3}' test_awk2.txt

内容的模式匹配——正则表达式

  • awk中正则表达式的规则:

​ 1、^linux 以linux开头的行

2、$PHPPHP结尾的行

3、. 匹配任意单字符

4、.+ 匹配任意多个字符 (1个到多个)

5、 .* 匹配0个或多个字符(可有可无)

6、 [0-9a-z] 匹配中括号内任意一个字符

7、 (linux)+ 出现多次Linux单词

8、 (web){2} web出现两次以上

​ 9、\ 屏蔽转义

# 匹配test_awk2.txt中包含cc的内容
awk '/cc/' test_awk2.txt
# 匹配test_awk2.txt中第1段包含cc的内容 ~ 代表match 匹配  /cc/ 可以认为时 pattern
# print 一般要加上指定的列,但是如果匹配上的文本行都显示出来的时候,就不需要指定 print
awk -F ':' '$1 ~ /cc/' test_awk2.txt
# 匹配test_awk2.txt中第1段包含至少连续两个c的内容
awk -F ':' '$1 ~ /cc+/' test_awk2.txt
awk -F ':' '$1 ~ /(cc)+/' test_awk2.txt
awk -F ':' '$1 ~ /(c){2}/' test_awk2.txt
#在test_awk2.txt中如果匹配到abc就打印第1,3段,如果匹配到ccc,就打印第1,3,4段
awk -F ':' '/abc/ {print $1,$3} /ccc/ {print $1,$3,$4}' test_awk2.txt
#在test_awk2.txt中如果匹配到aaa或者ddd,就打印全部内容
awk '/aaa|ddd/' test_awk2.txt

内容判断

根据awk命令,将分段进行内容的匹配和判断,判断的规则:

运算符解释
= += -= *= /= %= ^= **=赋值
?:C条件表达式
||逻辑或
&&逻辑与
~ 和 !~匹配正则表达式和不匹配正则表达式
< <= > >= != ==关系运算符
空格连接
+ -加,减
* / %乘,除与求余
+ - !一元加,减和逻辑非
^ ***求幂
++ –增加或减少,作为前缀或后缀
$字段引用
in数组成员
# 在test_awk2.txt中如果第3段等于222就打印所有内容
awk -F ':' '$3==222' test_awk2.txt 
# 在test_awk2.txt中如果第3段等于333就打印第一段
awk -F ':' '$3==333 {print $1}' test_awk2.txt 
# 在test_awk2.txt中如果第3段等于300就打印第一段
awk -F ':' '$3==300 {print $1}' test_awk2.txt 
# 在test_awk2.txt中如果第1段等于ccc,并且第2段等于666就打印全部
awk -F ':' '$1=="ccc" && $2==666 {print $0}' test_awk2.txt 

段之间的比较

# 在test_awk2.txt中如果第3段小于第4段就打印全部
awk -F ':' '$3<$4' test_awk2.txt 
# 在test_awk2.txt中如果第2段等于第4段就打印全部
awk -F ':' '$2=$4' test_awk2.txt 

NR行号和NF段数

NF一条记录的字段的数目(多个字段)
NR已经读出的记录数,就是行号,从1开始(加个行号)
#打印test_awk2.txt全部内容显示行号 (加一列做为序号)
awk -F ':' '{print NR":"$0}' test_awk2.txt
#打印test_awk2.txt全部内容显示段数(加一列作为字段数)
awk -F ':' '{print NF":"$0}' test_awk2.txt
#打印test_awk2.txt前2行,并显示行号
# nl命令在linux系统中用来计算文件中行号 NL linux命令
nl test_awk2.txt | head -2      | nl test_awk2.txt | tail -2
awk -F ':' 'NR<3 {print NR " " $0}' test_awk2.txt

综合案例

#对统计awk目录下所有文本文件的大小
ll -h |awk -F ' ' '{total=total+$5} {print(total)}'
ll | awk 'BEGIN{}{total=total+$5} END{print(total)}'
#打印99乘法表
awk 'BEGIN{ for(i=1;i<=9;i++){ for(j=1;j<=i;j++){ printf("%dx%d=%d%s", i, j, i*j, "\t" ) } printf("\n") } }'

Shell编程

shell介绍

  • shell脚本执行方式Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务。它类似于 DOS 下的 command 和后来的 cmd.exe。Shell 既是一种命令语言,又是一种程序设计语言。

  • Bash 也是大多数Linux 系统认的 Shell

#!/bin/bash
echo 'hello world'
#! 标记当前这个脚本是shell脚本,解释器要知道 sh bash awk等

shell解释器

查看有哪些解释器:

cat /etc/shells
  • 在现代的 Linux上,sh 已经被 bash 代替,/bin/sh往往是指向/bin/bash的符号链接
  • 查看当前系统的 shell 脚本解释器 echo $SHELL

shell执行的方式

  1. sh 文件.sh
  2. ./文件.sh # 需要赋权 chmod u+x 文件.sh # 相对路径或者完整路径

@L_502_20@shell数据类型

  • 字符串类型

字符串可以使用单引号,双引号,也可以不用引号

  • 整数类型

需要进行数学计算的时候,需要用到整数类型 , $((运算式)) $[运算式] ,如果不进行数学运算就用 字符串就行。

shell变量

shell变量是弱类型的变量,有3中变量:用户变量,环境变量,特殊变量

  • 变量的定义格式:

    变量名 = 变量值

a=123

说明:如果是单引号,里面的内容作为一个字符串,如果是双引号,那么里面的变量会被取出值。

变量的定义需遵循的规则

  1. 变量名可以由字母、数字和下画线组成,但是不能以数字开头。

  2. 在 Bash中,变量的认类型都是字符串型,如果要进行数值运算,则必须使用特殊命令。

  3. 变量用等号"=“连接值,”="左右两侧不能有空格。

  4. 变量值中如果有空格,则需要使用单引号或双引号包含,如 test=“Hello World!”。双引号括起 来的内容"$"和反引号者都拥有特殊含义,而单引号括起来的内容都是普通字符。

  5. 在变量值中,可以使用转义符"\"。

  6. 不能使用bash里的关键字(可用help命令查看保留关键字)。

用户变量

注意:单引号里的内容原封不动的输出,双引号里有变量的调用则会调用变量

image-20200814141907488
  • 定义变量 a=1
  • 访问变量 echo $a
  • 字符串的叠加操作
image-20200814142824593

测试的脚本

#! /bin/bash 
string="I am shell" 
num=5 
echo "a=${num},string=${string}"
  • 变量的赋值操作(重要
    • read 关键字读取键盘上的值
    • 通过KaTeX parse error: Can't use function '\`' in math mode at position 1: \̲`̲shell命令\`或(shell命令) 执行shell命令,并且将执行的结果赋值给变量。
#!/bin/bash
echo 'who are U?'
read name
pwd_path=$(pwd)
date_str=`date`
echo "i am $name"
echo "current date is $date_str"
echo "current path $pwd_path"
  • 只读变量
#!/bin/bash 
myUrl="http://www.google.com"
readonly myUrl
myUrl="http://www.runoob.com"
# 此时不能更改只读变量,否则会报错
#置空当前变量的值
#!/bin/sh 
myUrl="http://www.runoob.com" 
unset myUrl 
echo $myUrl

以上是用户变量的内容

环境变量

  • 当shell程序启动时,都自动设置一组变量,这组变量就是环境变量。shell中的所有命令都可以使用这些变量,环境变量可以在/etc/profile中设置,环境变量的名字习惯上使用大写字母。
    • 查看当前的环境变量 env
    • 常见的环境变量
常见的环境变量:
PATH 决定了shell将到哪些目录中寻找命令或程序 
HOME 当前用户主目录 
HISTSIZE 历史记录数 
LOGNAME 当前用户登录名 
HOSTNAME 指主机的名称 
SHELL 当前用户Shell类型 
LANGUGE  语言相关的环境变量,多语言可以修改此环境变量 
MAIL 当前用户邮件存放目录 
PS1 基本提示符,对于root用户是#,对于普通用户是$
#进入环境变量设置文件
vim /etc/profile 
#export 变量Key=变量Value
export JAVA_HOME=/export/server/jdk_1.8.20
# 保存退出
wq
#立即生效
source /etc/profile

特殊变量

​ 我们可以在执行 Shell 脚本时,向脚本传递参数,这时候可以使用特殊变量来获取参数,Shell常用的特殊变量如下:

变量解释
$#命令行参数的个数
$n$1表示第一个参数,$2表示第二个参数,以此类推
$0当前程序的名称
$?一个命令或许或函数的返回码
$*以“参数1 参数2 。。。”形式保存所有参数
$@以“参数1”“参数2”。。。形式保存所有参数
$$本程序的(进程ID号)PID
$!一个命令的PID
#!/bin/bash 
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示*:$*";
echo "传递的参数作为一个字符串显示*:$@";                                            

$* 与 $@ 区别:

相同点:都是引用所有参数。

不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)

shell字符串

  • 单引号:

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的,单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

  • 双引号:

可以使用变量也可以使用转义字符

  • 字符串的长度
#!/bin/bash
name="alibaba"
echo ${name}
echo ${#name}
#!/bin/bash
string="敢于亮剑决不后退"
echo ${string:2:2}    # 输出结果为: 亮剑
  • 查找字符串的位置
#!/bin/bash
string="i am a boy"
echo `expr index "$string" am`    # 输出是: 3

注: 以上脚本中 ` 是反引号(Esc下面的),而不是单引号 ',不要看错了哦。

shell算术运算符

简介

Shell 和其他编程一样,支持包括:算术、关系、布尔、字符串等运算符。原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如expr。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

  • 两个数相加减
## 运算符和数字之间必须有空格,* / 要有转义
## 反引号中间括起来是完整的表达式
#!/bin/bash
val=`expr 2 \* 2 + 2 - 1`
echo $val
运算符说明举例
+加法expr $a + $b 结果为 30。
-减法expr $a - $b 结果为 -10。
*乘法expr $a \* $b 结果为 200。
/除法expr $b / $a 结果为 2。
%取余expr $b % $a 结果为 0。
=赋值a=$b 将把变量 b 的值赋给 a。
==相等。用于比较两个数字,相同则返回 true。[ a == b ] 返回 false。
!=不相等。用于比较两个数字,不相同则返回 true。[ a != b ] 返回 true。
#!/bin/bash 
a=4
b=20
#加法运算 
echo expr $a + $b 
#减法运算 
echo expr $a - $b 
#乘法运算,注意*号前面需要反斜杠 
echo expr $a \* $b 
#除法运算 echo $a / $b 
#此外,还可以通过$(())、$[]进行算术运算。 
echo "a = $a" 
c=$((a+b))
d=$[a+b]
echo "c = $c" 
echo "d = $d"

shell流程控制

语句控制

equal ,not equal, greater than, less than, greater equal, less equal

  • 数字的判断
运算符说明
-eq检测两个数是否相等,相等返回 true。
-ne检测两个数是否不相等,不相等返回 true。
-gt检测左边的数是否大于右边的,如果是,则返回 true。
-lt检测左边的数是否小于右边的,如果是,则返回 true。
-ge检测左边的数是否大于等于右边的,如果是,则返回 true。
-le检测左边的数是否小于等于右边的,如果是,则返回 true。
  • 字符串的判断
判断符说明
-n STRING字符串长度不为零
-z STRING字符串长度为0
=判断两个字符串是否一样
!=判断两个字符串是否不一样
判断说明
-f存在且是普通文件 file
-d存在且是目录 diretory
-h存在且是符号链接 hop
-e文件存在 exists
–r文件存在并且可读 read
–w文件存在并且可写 writable
–x文件存在并且可执行 executable

if 语句

if
if condition
then
    command1 
    command2
    ...
    commandN 
fi

案例:

# 判断当前系统是否有多个ssh进程,如果有则打印true
#!/bin/bash
if [ `ps -ef|grep "ssh" |wc -l` -gt 1 ]
then echo "true"
fi
# 判断/tmp/cdrom目录是否存在,若不存在就去创建这个目录
#!/bin/bash
directory="/tmp/cdrom"
if [ ! -e $directory ]
then mkdir -p $directory
fi
if else
if condition
then
    command1
    command2
    ...
    commandN
else
    command
fi
#根据年龄来判断当前是否是成年人
#!/bin/bash
read -p "Enter your age(1-100):" age
if [ $age -ge 18 ]
then
     echo '已经成年!'
else
     echo '未成年!'

fi
  • if else语句经常与test命令结合使用

test 命令允许你做各种测试并在测试成功或失败时返回它的退出状态码(为0表示为真,为1表示为假)。使用这个状态码,可以让 Bash 对测试的结果做出反应。

test 命令的语法为:

test EXPRESSION

[ EXPRESSION ]

# 判断两个数字是否相等,使用test表达式
#如果test满足条件返回状态码为0 否则返回状态码为1
#!/bin/bash
num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
    echo '两个数字相等!'
else
    echo '两个数字不相等!'
fi
  • if else-if else
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi
## 判断两个值是否相等
#!/bin/bash 
echo "请输入a的值:" 
read a 

echo "请输入b的值:" 
read b
if [ $a == $b ] 
then 
echo "a 等于 b" 
elif [ $a -gt $b ] 
then 
echo "a 大于 b" 
elif [ $a -lt $b ] 
then 
echo "a 小于 b" 
else 
echo "没有符合的条件" 
fi
## 判断成绩 优秀 良好 中等 及格 不及格
#!/bin/bash
read -p "Enter your score(0-100):" n #-p参数表示给出提示信息
if [ $n -ge 85 ] && [ $n -le 100 ] ; then
 echo "优"
elif [ $n -ge 70 ] && [ $n -le 84 ] ; then
 echo "良"
elif [ $n -ge 60 ] && [ $n -le 69 ] ; then
 echo "中"
else
 echo "差" 
fi

shell 的for循环语句

for 变量 in 值1 值2 值3…
do
程序
done
## 遍历根目录下的所有文件名称
#!/bin/bash 
for file in `ls /`
do echo $file 
done

for 数字循环格式

for ((初始值;循环控制条件;变量变化))
do
程序
done

案例:

## 累加1-100 的累加和
#!/bin/bash
s=0
#从1加到100
for(( i=1;i<=100;i=i+1))
#定义循环100次
do
 #每次循环给变量s赋值
 s=$(($s+$i))
done
#输出从1加到100的和
echo "The sum of 1+2+..+100 is : $s"

需要注意以下几点:

初始值:在循环开始时,需要给某个变量赋予初始值,如 i=1。

循环控制条件:用于指定变量循环的次数,如 i<=100,则只要 i 的值小于等于 100,循环就会继续。

**变量变化:**每次循环之后,变量该如何变化,如 i=i+1,代表每次循环之后,变量的值都加 1。

语法二和其他语言中的 for 循环类似,也就是事先决定循环次数的固定循环。

shell的while循环语句

  • 语法格式
while 条件
do
    程序
done
# 满足小于5的数字打印出来
#!/bin/bash
num=1
while(( $num<=5 ))
do
    echo $num
    let "num++"
done

使用中使用了 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量,具体可查阅:Bash let 命令

shell的case语句

Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

case工作方式如上所示。取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

#case 值 必须要有 in
#值必须要用 )
# ;; 类似于 java break;
#结束 esac作为结束
echo '输入 1 到 4 之间的数字:'

echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

跳出循环

  • break
read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
            break
        ;;
    esac
done
  • continue
#!/bin/bash
while :
do
    echo -n "输入 1 到 5 之间的数字: "
    read aNum
    case $aNum in

        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的!"
            continue
            echo "游戏结束"
        ;;
    esac
done

函数

  • 语法格式
[ function ] funname()
{
    action;
    [return int;]
}

案例

# 带返回的函数
#!/bin/bash
funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."

    echo "输入第一个数字: "
    read aNum
echo "输入第二个数字: "

    read anotherNum
    echo "两个数字分别为 $aNum 和 $anotherNum !"
    return $(($aNum+$anotherNum))
}

funWithReturn
echo "输入的两个数字之和为 $? !"

需要注意: 虽然此处根据 $? 返回了函数函数值, 但本质其实不是, $? 是用于返回上一个命令的执行完的一个状态, 而这个状态值为(0~255)的范围, 当执行成功, 状态码为0 , 返回其他任意值都表示有异常, 故正确的函数的返回值, 应该如下的操作:

#!/bin/bash
echo "---------第一种方式: ---------------"

result=""
sum() {
 #1  让用户输入两个数字
 read -p "请输入第一个数字: " num1
 read -p "请输入第二个数字:" num2
 result=$[$num1+$num2]
}
sum

echo "返回值为: ${result}"

echo "---------第二种方式------------"
sum1() {
 #1  让用户输入两个数字
 read -p "请输入第一个数字: " num1
 read -p "请输入第二个数字:" num2
 result=$[$num1+$num2]
 echo "${result}"
}
result1=$(sum1)
echo "返回值: ${result1}"

注意,(centos6.x版本)不能获取第十个参数,获取第十个参数需要{10}。当n>=10时,需要使用${n}来获取参数。

数组

定义数组

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

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

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

array_name=(value1 … value)

#!/bin/bash

my_array=(A B "C" D)

#我们也可以使用下标来定义数组:

array_name[0]=value0

array_name[1]=value1

array_name[2]=value2

echo "第2个元素:${my_array[1]}"
  • 获取数组中的所有元素
#!/bin/bash

my_array[0]=“A”
my_array[1]=“B”
my_array[2]=“C”
my_array[3]=“D”

echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"

获取数组长度的方法获取字符串长度的方法相同。 需要用到 #

#!/bin/bash
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D

echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"
  • 遍历数组
#!/bin/bash
my_arr=(AA BB CC)

for var in ${my_arr[*]}
do
  echo $var
done

shell综合案例

# 游戏规则为:程序内置一个1到100 之间的数字作为猜测的结果,由用户猜测此数字。用户每猜测一次,由系统提示猜
# 测结果:大了、小了或者猜对了;直到用户猜对结果,则提示游戏结束。
#!/bin/bash
#随机生成一个数字
#5000%100=0
#除数为3,可能的余数是几? 0 ,1 ,2
num=$[RANDOM%100 + 1]
#循环读取一个数字来判断是否等于随机生成数字,并判断
while :
do
read -p "输入1-100 随机数据:" a
  
   if [ $a -eq $num ]
   then echo "ok,猜的很对"
   exit
   elif [ $a -gt $num ]
   then echo "你猜大了"
   else echo "你猜小了"
   fi
done

完毕。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐