1、系统信息提取

image-20250427221540867

2、**99乘法表**

image-20250427221707942

7 shell 脚本语言基础

7.1 实验介绍

7.1.1 实验介绍

在对系统进行运维时,shell 脚本给了我们很大帮助。通过 shell 脚本,可以大大减少工作量。

本实验主要介绍 shell 脚本的概念及使用。

7.1.2 实验目标

掌握全局变量及局部变量;

掌握位置化参数使用;

掌握 shell 中的特殊字符;

掌握常用的 shell 语句。

7.2 shell 变量

7.2.1 用户变量的定义

步骤 1

执行如下命令,设置自定义局部变量。

###作为交互式输入手段,可以利用 read 命令由标准输入(即键盘)上读取数据,然后赋给指定的变

量。

其一般格式是:read 变量 1 [变量 2...]

[root@openeuler ~]# dir=/usr/tmp/

[root@openeuler ~]# echo $dir

/usr/tmp/

[root@openeuler ~]# today=Sunday

[root@openeuler ~]# echo $today

Sunday

[root@openeuler ~]# echo $Today

//无回显

[root@openeuler ~]# str="Hapy New Year!"

[root@openeuler ~]# echo "Wish You $str"

Wish You Hapy New Year!

[root@openeuler ~]# read name

openeuler

//此处输入 openeuler

[root@openeuler ~]# echo $name

openeuler

[root@openeuler ~]# read a b c

kunpeng 2020 huawei

#此处输入 kunpeng 2020 huawei[root@openeuler ~]# echo $a

kunpeng

[root@openeuler ~]# echo $b

2020

[root@openeuler ~]# echo $c

huawei

image-20250427214001926

步骤 2

执行如下步骤,配置用户变量。

[root@openEuler ~]# vim .bash_profile

~/.bash_profile 是用户独享的配置文件

#在文件最后新增一行,修改完成后保存退出:

a=1000

[root@openEuler ~]# echo $a

#未更新变量文件时,a 值未发生变化

kunpeng

[root@openEuler ~]# source .bash_profile #更新变量文件后,a 值发生变

[root@openEuler ~]# echo $a

1000

[root@openEuler ~]# bash

#打开一个新的 bash

[root@openEuler ~]# echo $a #a 变量未定义

[root@openEuler ~]# exit

#退出新打开的 shell

image-20250427214052186

image-20250427214110727

[root@openEuler ~]# su - root#以登录的方式切换用户,此时会自动读取.bash_profile 文件

[root@openEuler ~]# echo $a #a 变量值生效

1000

[root@openEuler ~]# exit

image-20250427214212579

#退出当前的登录 shell步骤 3

执行如下步骤,配置系统环境变量。

[root@openEuler ~]# vim /etc/profile

/etc/profile 是系统的配置文件,所有用户共享

#在文件最后新增一行,输入如下信息,并保存退出:

b=2000

[root@openEuler ~]# echo $b

#变量未更新

2020

[root@openEuler ~]# source /etc/profile

#更新变量

[root@openEuler ~]# echo $b

2000

#变量值发生了变化

[root@openEuler ~]# bash

#打开一个新的 bash

[root@openEuler ~]# echo $b #b 变量未定义

[root@openEuler ~]# exit

#退出新打开的 shell

[root@openEuler ~]# su - root#以登录的方式切换用户,此时会自动读取.bash_profile 文件[root@openEuler ~]# echo $b #a 变量值生效

2000

[root@openEuler ~]# useradd huawei

#新增一个用户

[root@openEuler ~]# su - huawei

#切换到该用户

[huawei@openEuler ~]$ echo $b

2000

#变量 b 生效

[huawei@openEuler ~]$ exit

#退出当前用户

image-20250427214235956

image-20250427214339188

image-20250427214514202

logout7.2.2 位置参数

步骤 1

在/root 目录下新建三个文件 m1.c、m2.c、ex1.sh,内容如下:

m1.c:

main()

{

printf("Begin \n");

}

m2.c:

# include < stdio.h >

{

printf("OK! \n");

}

ex1.sh:

#!/bin/bash

# ex1.sh: shell script to combine files and count lines

cat $1 $2 $3 $4 $5 $6 $7 $8 $9 | wc -l

# end

[root@openeuler ~]# chmod u+x ex1.sh

[root@openeuler ~]# sh ex1.sh m1.c m2.c

8

image-20250427220315983

image-20250427220339998

7.3 shell 中的特殊字符

步骤 1

新建脚本 ex3.sh,写入如下内容:

步骤 1

在/root 目录下新建三个文件 m1.c、m2.c、ex1.sh,内容如下:

m1.c:

main()

{

printf("Begin \n");

}

m2.c:

# include < stdio.h >

{

printf("OK! \n");

}

ex1.sh:

#!/bin/bash

# ex1.sh: shell script to combine files and count lines

cat $1 $2 $3 $4 $5 $6 $7 $8 $9 | wc -l

# end

[root@openeuler ~]# chmod u+x ex1.sh

[root@openeuler ~]# sh ex1.sh m1.c m2.c

8

#!/bin/bash

echo "current directory ispwd"

echo "home directory is $HOME"

echo "file*.?"

echo " directory '$HOME'"步骤 2

执行脚本 ex3.sh

7.4 条件判断与循环结构

7.4.1 if 语句

7.4.1.1 语法示例

步骤 1

新建脚本 ex4.sh,写入如下内容:

步骤 2

执行脚本 ex4.sh。

[root@openeuler ~]# chmod u+x ex3.sh

[root@openeuler ~]# sh ex3.sh

current directory is 'pwd'

home directory is /root

file*.?

directory '/root

image-20250427220957187

7.4 条件判断与循环结构

7.4.1 if 语句

7.4.1.1 语法示例

步骤 1

新建脚本 ex4.sh,写入如下内容:

步骤 2

执行脚本 ex4.sh。

[root@openeuler ~]# chmod u+x ex3.sh

[root@openeuler ~]# sh ex3.sh

current directory is 'pwd'

home directory is /root

file*.?

directory '/root'

#!/bin/bash

a=3

b=$1

if [ $a == $b ]

then

echo "You win!"

else

echo "Please guess again."

fi

[root@openeuler ~]# chmod u+x ex4.sh

[root@openeuler ~]# ./ex4.sh 3

You win!

[root@openeuler ~]# ./ex4.sh 4

Please guess again.

image-20250427221202630

7.4.4 for 语句

步骤 1

新建脚本 ex7.sh,写入如下内容:

步骤 2

执行脚本 ex7.sh

#!/bin/bash

for Num in {1..10}

do

echo $Num

done

[root@openeuler ~]# sh ex7.sh

1

2

3

4

5

6

7

8

9

10

image-20250427221347422

步骤 3

新建一个 namefile 文件,写入如下内容:

步骤 4

新建脚本 ex8.sh,写入如下内容:

步骤 5

执行脚本 ex8.sh。

user1

user2

user3

user4

#!/bin/bash

for Name in $(cat ./namefile)

do

echo $Name

done

[root@openeuler ~]# sh ex8.sh

user1

user2

user3

user4

image-20250427221444200

7.4.5 case 语句

步骤 1

新建脚本 ex9.sh,写入如下内容:

步骤 2

执行脚本 ex9.sh。

image-20250424161358647

#!/bin/bash

echo 'Input a number between 1 to 4'

printf 'Your number is:\n'

read aNum

case $aNum in

1) echo 'You select 1'

;;

2) echo 'You select 2'

;;

3) echo 'You select 3'

;;

4) echo 'You select 4'

;;

*) echo 'You do not select a number between 1 to 4'

;;

esac

[root@openEuler ~]# sh ex9.sh

Input a number between 1 to 4

Your number is:

1

You select 1

image-20250427221510070

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐