介绍 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】将指定目录下的所有指定后缀文件,按照统一的方式命名。
评论