Linux开发_Shell脚本编程语言

172 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情

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