Linux开发_Shell脚本编程语言

举报
DS小龙哥 发表于 2022/05/23 22:58:59 2022/05/23
【摘要】 介绍Linux下Shell编程,介绍shell里语句、变量、函数、运算符的使用。

任务1:Shell脚本语言

Linux下常用的脚本语言。

变量、数组、for、while、函数、运算符、if、……..

[root@wbyq /]# ls /bin/sh -l

lrwxrwxrwx. 1 root root 4 12月 27 2016 /bin/sh -> bash

​ 变量定义使用

#!/bin/bash

ABC=12345

echo "ABC=$ABC"

echo "ABC=${ABC}"

​ Shell脚本传递参数 类似于C语言的argv argc

#!/bin/bash

echo "cnt=$#"

echo "[0]=$0"

echo "[1]=$1"

echo "[2]=$2"

echo "[3]=$3"

​ if语句语法规则


#!/bin/bash

a=10

b=20

if [ ${a} -eq ${b} ] #判断两个数是否相等,也可以使用 ==

then

echo "123"

else

echo "456"

fi



#!/bin/bash

if [ 100 == 120 -o 50 != 40 ] && [ 100 == 200 ]

then

echo "条件为真"

else

echo "条件为假"

fi


#一个[]表示一个完整的表达式

#-a表示与 -o表示或 只能用于单个表达式之内

#多个表达式之间可以使用&&和 || 嵌套连接



#!/bin/bash

#嵌套if语句示例

if [ 100 == 120 -o 50 != 40 ] && [ 100 == 200 ]

then

if [ 100 == 120 -o 50 != 40 ] && [ 100 == 200 ]

then

echo "条件为真"

else

echo "条件为假"

fi

else

if [ 100 == 120 -o 50 != 40 ] && [ 100 == 200 ]

then

echo "条件为真"

else

echo "条件为假"

fi

fi

​ 计算字符串长度


#!/bin/bash

string="abcd"

echo ${#string} #输出 4

​ 数组语法

#!/bin/bash

buff=(1 2 3 4 5 6 7 8 9)


buff[0]=88

buff[1]=99

buff[100]=100

buff[88]=55


echo "buff[0]=${buff[0]}"

echo "buff[1]=${buff[1]}"

echo "buff[2]=${buff[2]}"

echo "buff[100]=${buff[100]}"

​ echo用法示例

#!/bin/bash

DATA=12345

echo "DATA=${DATA}"

​ printf语句格式

#!/bin/bash

printf "%d\n" 1234

printf "%s\n" "45678"

​ 从键盘上读取数据

#!/bin/bash

echo -n "输入数据:" #参数-n 的作用是不换行, echo 默认是换行

read data #从键盘输入

echo "你输入的数据为: $data" #显示信息


​ Case多分支选择语句

#!/bin/bash

echo "输入一个 1 到 4 之间的数字"

read aNum

case ${aNum} in

1) echo "你选择 1"

;;

2) echo "你选择 2"

;;

3) echo "你选择 3"

;;

4) echo "你选择 4"

;;

5) echo "你选择 4"

;;

*) echo "你不选择一个数字不在 1 到 4 之间"

;;

esac

​ for循环


(1)基本用法

#!/bin/bash

for loop in 1 2 3 4 5 6 7 8 9

do

echo "loop=${loop}"

done


(2) 嵌套示例

#!/bin/bash

for loop in 1 2 3

do

for loop in 1 2 3

do

echo "loop=${loop}"

done

done


(3)输出位置路径

#!/bin/bash

for loop in /test/*.sh

do

echo "file_name=${loop}"

done

​ break关键字


#!/bin/bash

for loop in 1 2 3

do

for loop in 1 2 3

do

echo "loop=${loop}"

break 2 #break后面可以加参数,选择跳出的循环层次

done

done

​ while循环示例

(1)示例1

#!/bin/bash

while : #无限循环条件

do

sleep 1 #休眠1秒钟

echo "123"

break 1 #跳出指定层次的循环

done



(2)示例2

#!/bin/bash

COUNTER=0

while [ ${COUNTER} -lt 5 ]

do

COUNTER=`expr ${COUNTER} + 1`

echo "COUNTER=${COUNTER}"

done


COUNTER=0

while [ ${COUNTER} != 5 ]

do

COUNTER=`expr ${COUNTER} + 1`

echo "COUNTER=${COUNTER}"

done


(2)示例3

#!/bin/bash

while read DATA

do

echo "DATA=${DATA}"

done


(3)示例4

#!/bin/bash

while read DATA

do

echo "DATA=${DATA}"

continue #跳出当前这一次循环

echo "1234556"

done

​ 函数


(1)​ 基本示例

#!/bin/bash

#函数的编写格式

func()

{

echo "函数调用调用成功!"

}

func #调用函数不需要加()


(2)​ 嵌套调用


#!/bin/bash


#函数的编写格式

func1()

{

func2

}


func2()

{

echo "函数调用调用成功!"

}


func1 #调用函数不需要加()


(3)​ 函数的返回值

#!/bin/bash


#函数的编写格式

func()

{

return 255 #最大范围是255

}


func #调用函数不需要加

echo $?


(4)​ 函数的形参

#!/bin/bash


#函数的编写格式

func()

{

echo "$1"

echo "$2"

echo "$3"

echo "$4"

return 255 #函数返回值只能是整数,最好不要返回路径。

}


func 123 456 789 dfvbfdjvbgdf

echo $?




​ 调用外部脚本


#!/bin/bash

. 123.sh

source 123.sh


echo "a=${a}"

echo "b=${b}"

echo "c=${c}"


​ Shell脚本练习

1.​ 从键盘上输入年份,判断平年闰年

#!/bin/bash
echo -n "请输入年份:"  # -n 不换行
read year   #从键盘上读取年份

#能被400整除 ,能被4整除不能被100整除
if [ `expr $year % 400` == 0 ] || [ `expr $year % 4` == 0 -a `expr $year % 100` != 0 ]
then
	echo "$year是闰年"
else
	echo "$year是平年"
fi

2.​ 输出9*9乘法口诀表。

3.​ 冒泡排序。

4.​ 使用函数封装判断平年闰年

5.​ 输出所有水仙花数(个位+十位+百位的立方和=本身)例如: 1*1*1+2*2*2+3*3*3=123

6.​ 判断100~200之间所有的素数

7. 写一个脚本

(1). 切换工作目录至指定目录

(2). 依次向指定目录中的每个文件或子目录问好,形如:

(提示:for FILE in /var/*;或for FILE in `ls /var`;)

Hello,log

(3).统计/var目录下共有多个文件,并显示出来

8. 写一个脚本, 通过ping命令测试192.168.x.0到192.168.x.254之间的所有主机是否在线

如果在线,就显示“在线”

如果不在线,就显示“离线”

注意:ping -c1 -w1 中-c1是指ping的次数,-w是指执行的最后期限,也就是执行的时间,单位为秒

9. 模拟linnux登录shell

就是输入用户名密码判断是否正确。

10. 查找指定目录下最大的文件,然后输出

11. 将指定目录下的所有指定后缀文件,按照统一的方式命名。




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。