Shell教程四----输入输出,条件判断,循环
Posted Z小旋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell教程四----输入输出,条件判断,循环相关的知识,希望对你有一定的参考价值。
Shell输出 echo命令
在shell中,echo 指令用于字符串的输出
命令格式:
echo string
可以使用 (反斜号)‘’(单引号)""(双引号)包含字符串,具体功能在第二节讲过。
echo "Hello World"
输出:
Hello World
echo `date`
输出:
Shell输入 read读取控制台输入
read(选项)(参数)
选项:
- -p:指定读取值时的提示符;
- -t:指定读取值时等待的时间(秒)。
参数:
- 变量:指定读取值的变量名
测试:
read -t 7 -p "Enter your name in 7 seconds " NAME
echo $NAME
输出:
流程控制
if 判断
基本语法:
单分支if语句:
if [ 条件判断式 ];
then
程序
fi
双分支if条件语句
if [ 条件判断式 ]
then
条件成立时,执行的程序
else
条件不成立时,执行的另一个程序
fi
多分支if条件语句
if [ 条件判断式1 ]
then
当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]
then
当条件判断式2成立时,执行程序2
…省略更多条件…
else
当所有条件都不成立时,最后执行此程序
fi
注意:
- [ 条件判断式 ],中括号和条件判断式之间必须有空格
- if后要有空格
例程:
1.判断普通文件$file是否存,若不存在,则新建一个
#!/bin/bash
read -t 7 -p "Enter file name in 7 seconds " file
if [ ! -f "$file" ]; then
touch "$file"
fi
2.查看当前操作系统类型
#!/bin/sh
SYSTEM=`uname -s`
if [ $SYSTEM = "Linux" ] ; then
echo "Linux"
elif
[ $SYSTEM = "FreeBSD" ] ; then
echo "FreeBSD"
elif
[ $SYSTEM = "Solaris" ] ; then
echo "Solaris"
else
echo "What?"
fi
3.判断用户输入的是什么文件
[root@localhost ~]$ vi sh/if-elif.sh
#!/bin/bash
#判断用户输入的是什么文件
read -p "Please input a filename: " file
#接收键盘的输入,并赋予变量file
if [ -z "$file” ]
#判断file变量是否为空
then
echo "Error, please input a filename"
#如果为空,执行程序1,也就是输出报错信息
exit 1
#退出程序,并返回值为Ⅰ(把返回值赋予变量$P)
elif [ ! -e "$file” ]
#判断file的值是否存在
then
echo "Your input is not a file!"
#如1果不存在,则执行程序2
exit 2
#退出程序,把并定义返回值为2
elif [ -f "$file” ]
#判断file的值是否为普通文件
then
echo "$file is a regulare file!”
#如果是普通文件,则执行程序3
elif [ -d "$file” ]
#到断file的值是否为目录文件
then
echo "$file is a directory!"
#如果是目录文件,网执行程序4
else
echo "$file is an other file!”
#如果以上判断都不是,则执行程序5
fi
4.检测执行脚本的用户是否具有权限
if [ "$(whoami)" != 'root' ]; then
echo "You have no permission to run $0 as non-root user."
exit 1;
fi
case条件语句
case … esac 为多选择语句,是一种多分枝选择结构
基本语法:
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
::
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意:
- case首行末尾必须为“in”,每一个匹配必须以右括号“)”结束
- 取值可以为变量或常数
- 双分号“;;”表示执行结束 相当于break
- 如果所有的值都不符合,则执行 “*)”中的程序 “*)”表示默认模式
- case语句以“case”开头,以“esac”结尾
例程:
#!/bin/bash
read -p "请输入一个数字1 到4,并按Enter确认:" aNum
case $aNum in
1) echo 'You select 1'
;;
2) echo 'You select 2'
;;
3) echo 'You select 3'
;;
4) echo 'You select 4'
;;
*) echo 'You do not select a number between 1 to 4'
;;
esac
for 循环
基本语法:
语法一:
for 变量 in 值1 值2 值3 ..
do
程序
done
语法二:
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
例程:
1. 分别用 ∗ 和 *和 ∗和@打印输入的参数
#!/bin/bash
#打印输入的参数
#使用$*
for i in "$*"
do
echo "参数为: $i"
done
echo "====="
#使用$@
for j in "$@"
do
echo "参数为: $j"
done
2.输出1加到100的值
#!/bin/bash
#定义一个变量
SUM=0
for((i=0;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo "sum=$SUM"
3.批量删除用户
[root@localhost ~]$ vi sh/userdel.sh
#!/bin/bash
#批量删除用户
user=$(cat /etc/passwd | grep " /bin/bash"|grep -v "root"Icut -d ":" -f 1)
#读取用户信息文件,提取可以登录用户,取消root用户,截取第一列用户名
for i in $user
#循环,有多少个普通用户,循环多少次
do
userdel -r $i
#每次循环,删除指定普通用户
done
while 循环
对于while循环来讲,只要条件判断式成立,循环就会一直进行,直到条件判断式不成立,跳出循环。
基本语法:
while [ 条件判断式 ]
do
程序
done
例程:
1.从命令行输入一个数n,统计从1+…+n 的值是多少
#!/bin/bash
SUM=0
i=0
while [$i -le $1]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "sum=$SUM"
until循环
until 循环与 while 循环在刚好相反until循环时只要条件判断式不成立(flase)则进行循环,并执行循环程序。一旦循环条件成立(true),则终止循环。
基本语法:
until [ 条件判断式 ]
do
程序
done
例程:
1.从1加到100
#!/bin/bash
#从1加到100
i=1
s=0
#t给变量i和变量s赋值
until [ $i -gt 100 ]
#循环直到变量i的值大于100,就停止循环
do
s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo "The sum is: $s"
函数
shell 可以用户定义函数,然后在shell脚本中可以随便调用
基本语法:
function 函数名 ()
程序
例程:
1.获取用户输入一个数n,统计从1+…+n 的值是多少
#!/bin/bash
#接收用户输入的数字,然后从1加到这个数字
function sum ()
#定义函数sum
s=0
for (( i=0; i<=$num;i=i+1 ))
#循环直到i大于$1为止。$1是函数sum 的第一个参数
#在函数中也可以使用位置参数变量,不过这里的$1指的是函数的第一个参数
do
s=$(( $i+$s ))
done
echo "The sum of 1+2+3...+$1 is :$s"
#输出1加到$1的和
read -p "Please input a number: " -t 30 num
#接收用户输入的数字,并把值赋予变量num
if [ -z "$num"]
#判断变量y是否为空,以确定变量num中是否为数字
then
sum $num
#调用sum函数,并把变量num的值作为第一个参数传递给sum函数
else
echo "Error!! Please input a number!"
#如果变量num 的值不是数字,则输出报错信息
fi
exit语句
linux的exit命令,用于退出当前用户的登录状态。在Shell脚本中,exit语句用来退出当前脚本。也就是说,在Shell脚本中,只要碰到了exit语句,后续的程序就不再执行,而直接退出脚本。
基本语法:
exit [返回值]
若不设置返回值,最后执行的一条命令的退出码即为脚本的退出状态码。状态值0代表执行成功,其他值代表执行失败
在程序中使用exit,我们可以在不同的位置定义不同的返回值,可以通过查询$? 语句,来查看返回值
比方说程序出现错误返回-1 执行;
exit -1
程序正常运行完,最后一行就
exit 1
例程:
判断文件是否存在,存在返回1 不存在返回8
#!/bin/bash
FILE=hello.c
if [ -e $FILE ]; then
echo " 存在 $FILE "
exit 1
else
echo "不存在 $FILE"
exit 8
fi
以上是关于Shell教程四----输入输出,条件判断,循环的主要内容,如果未能解决你的问题,请参考以下文章
Linux实操篇—— Shell 编程入门变量运算符条件判断流程控制
shell编程之常用判断条件流程控制IFcaseforWHILE循环read读取控制台输入函数basenamedirname以及自定义函数