写点什么

Linux 开发 _Shell 脚本编程语言

作者:DS小龙哥
  • 2022 年 6 月 17 日
  • 本文字数:2331 字

    阅读完需:约 8 分钟

介绍 Linux 下 Shell 脚本语法基本编程: 涉及的知识点有变量使用、数组定义与使用、for 循环、while 循环、基本运算符、if 语句、break 语句、函数定义与调用等等。

任务 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 dfvbfdjvbgdfecho $?
复制代码


调用外部脚本


#!/bin/bash. 123.shsource 123.shecho "a=${a}"echo "b=${b}"echo "c=${c}"
复制代码


Shell 脚本练习


【1】从键盘上输入年份,判断平年闰年。


#!/bin/bashecho -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】输出所有水仙花数(个位+十位+百位的立方和=本身)例如: 111+222+333=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】将指定目录下的所有指定后缀文件,按照统一的方式命名。

发布于: 刚刚阅读数: 4
用户头像

DS小龙哥

关注

之所以觉得累,是因为说的比做的多。 2022.01.06 加入

熟悉C/C++、51单片机、STM32、Linux应用开发、Linux驱动开发、音视频开发、QT开发. 目前已经完成的项目涉及音视频、物联网、智能家居、工业控制领域

评论

发布
暂无评论
Linux开发_Shell脚本编程语言_6月月更_DS小龙哥_InfoQ写作社区