【Linux】【Shell】【Basic】流程控制
阅读原文时间:2023年07月08日阅读:2

1. 选择执行:

1.1. if

单分支的if语句:

if 测试条件
then
代码分支
fi

双分支的if语句:

if 测试条件; then
条件为真时执行的分支
else
条件为假时执行的分支
fi

示例:通过参数传递一个用户名给脚本,此用户不存时,则添加之;

#!/bin/bash

if ! grep "^$1\>" /etc/passwd &> /dev/null; then
useradd $1
echo $1 | passwd --stdin $1 &> /dev/null
echo "Add user $1 finished."
fi

#!/bin/bash

if [ $# -lt 1 ]; then
echo "At least one username."
exit 2
fi

if ! grep "^$1\>" /etc/passwd &> /dev/null; then
useradd $1
echo $1 | passwd --stdin $1 &> /dev/null
echo "Add user $1 finished."
fi

#!/bin/bash

if [ $# -lt 1 ]; then
echo "At least one username."
exit 2
fi

if grep "^$1\>" /etc/passwd &> /dev/null; then
echo "User $1 exists."
else
useradd $1
echo $1 | passwd --stdin $1 &> /dev/null
echo "Add user $1 finished."
fi

练习:通过命令行参数给定两个数字,输出其中较大的数值;

#!/bin/bash

if [ $# -lt 2 ]; then
echo "Two integers."
exit 2
fi

if [ $1 -ge $2 ]; then
echo "Max number: $1."
else
echo "Max number: $2."
fi

#!/bin/bash
#

if [ $# -lt 2 ]; then
echo "Two integers."
exit 2
fi

declare -i max=$1

if [ $1 -lt $2 ]; then
max=$2
fi

echo "Max number: $max."

练习:通过命令行参数给定一个用户名,判断其ID号是偶数还是奇数;

练习:通过命令行参数给定两个文本文件名,如果某文件不存在,则结束脚本执行;

都存在时返回每个文件的行数,并说明其中行数较多的文件;

1.2. case

语法格式:

case $VARAIBLE in
PAT1)
分支1
;;
PAT2)
分支2
;;

*)
分支n
;;
esac

case支持glob风格的通配符:
*:任意长度的任意字符;
?:任意单个字符;
[]:范围内任意单个字符;
a|b:a或b;

示例:写一个服务框架脚本;

$lockfile,  值/var/lock/subsys/SCRIPT_NAME

(1) 此脚本可接受start, stop, restart, status四个参数之一;
(2) 如果参数非此四者,则提示使用帮助后退出;
(3) start,则创建lockfile,并显示启动;stop,则删除lockfile,并显示停止;restart,则先删除此文件再创建此文件,而后显示重启完成;status,如果lockfile存在,则显示running,否则,则显示为stopped.

#!/bin/bash

chkconfig: - 50 50

description: test service script

prog=$(basename $0)
lockfile=/var/lock/subsys/$prog

case $1 in
start)
if [ -f $lockfile ]; then
echo "$prog is running yet."
else
touch $lockfile
[ $? -eq 0 ] && echo "start $prog finshed."
fi
;;
stop)
if [ -f $lockfile ]; then
rm -f $lockfile
[ $? -eq 0 ] && echo "stop $prog finished."
else
echo "$prog is not running."
fi
;;
restart)
if [ -f $lockfile ]; then
rm -f $lockfile
touch $lockfile
echo "restart $prog finished."
else
touch -f $lockfile
echo "start $prog finished."
fi
;;
status)
if [ -f $lockfile ]; then
echo "$prog is running"
else
echo "$prog is stopped."
fi
;;
*)
echo "Usage: $prog {start|stop|restart|status}"
exit 1
esac

2. 循环执行

2.1. for

进入条件:列表元素非空

退出条件:列表元素遍历完成

2.2. while

进入条件:条件测试结果为“真”

退出条件:条件测试结果为“假”

2.3. until

进入条件:条件测试结果为“假”

退出条件:条件测试结果为“真”

2.4. continue:提前结束本轮循环,而直接进入下一轮循环的判断

示例:求100以内所有偶数之和

#!/bin/bash

declare -i sum=0
declare -i i=1

until [ $i -gt 100 ]; do
let sum+=$i
let i++
done

echo $sum

#!/bin/bash

declare -i sum=0
declare -i i=1

while [ $i -le 100 ]; do
let sum+=$i
let i++
done

echo $sum

练习:分别使用for, while, until实现
1、分别求100以内所有偶数之和,100以内所奇数之和;
2、创建10个用户,user101-user110;密码同用户名;
3、打印九九乘法表;
4、打印逆序的九九乘法表;

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章