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脚本简介+编写

shell编程之常用判断条件流程控制IFcaseforWHILE循环read读取控制台输入函数basenamedirname以及自定义函数

python 输入输出 条件判断 循环

Shell教程三----运算符,条件判断

Shell全解析:Shell脚本程序