【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
 

hello.txt

请添加图片描述
请添加图片描述

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 很高兴为您提供答案。以下是输出1-1000内的素数的shell代码: ```shell for ((i=2;i<=1000;i++)) do flag=0 for ((j=2;j<i;j++)) do if [ $(($i%$j)) == 0 ] then flag=1 break fi done if [ $flag == 0 ] then echo $i fi done ``` 这段代码使用了两层循环,第一层循环从2到1000遍历每一个数字,第二层循环判断该数字是否为素数。如果一个数字能被2到自己-1的数字整除,那么就不是素数。如果内循环能够完整遍历,则说明该数是素数,输出即可。 ### 回答2: shell是一种命令行界面的操作系统,它主要用于处理和执行命令。要输出1-1000内的素数,我们可以使用shell脚本来实现。 首先,我们需要编写一个shell脚本文件,比如命名为prime.sh。 在prime.sh中,我们可以使用一个for循环来遍历1到1000之间的所有数字。在每次循环中,我们可以使用一个嵌套的for循环判断当前数字是否为素数。 判断素数的方法可以是,从2到当前数字的平方根之间遍历所有数字,判断是否有能整除当前数字的数字。如果有,则当前数字不是素数;如果没有,则当前数字是素数。 接下来,我们可以使用echo命令将所有素数输出到屏幕上。在每次判断到当前数字是素数时,我们可以在echo命令中使用管道符号“|”将输出内容连接起来,这样可以逐行输出。 最后,我们需要在终端中运行prime.sh文件,即输入命令"./prime.sh",便可以输出1-1000内的素数结果。 总结起来,要用shell输出1-1000内的素数,我们需要: 1. 创建一个名为prime.sh的shell脚本文件。 2. 在脚本中使用循环遍历1到1000之间的所有数字。 3. 在每次循环中使用一个嵌套的循环判断当前数字是否为素数。 4. 使用echo命令将素数逐行输出到屏幕上。 5. 在终端中运行prime.sh文件来获取结果。 ### 回答3: 要输出1-1000内的素数,我们可以使用Shell编程来实现。 Shell是一种命令行解释器,它可以运行Shell脚本。我们可以编写一个Shell脚本来输出1-1000内的素数。 下面是一个简单的示例脚本: ```shell #!/bin/bash is_prime() { if [ $1 -lt 2 ]; then return 1 fi local half=$(( $1 / 2 )) for (( i=2; i<=$half; i++ )); do if [ $(( $1 % $i )) -eq 0 ]; then return 1 fi done return 0 } for (( num=2; num<=1000; num++ )); do if is_prime $num; then echo $num fi done ``` 在这个脚本中,我们定义了一个名为“is_prime”的函数来检查一个数是否为素数。然后,我们使用一个循环来遍历1-1000内的所有数,并调用这个函数来判断每个数是否为素数。如果是素数,则将其输出。 要运行这个脚本,你需要将其保存为一个文件(例如:`prime.sh`),然后在终端中执行以下命令: ``` chmod +x prime.sh ./prime.sh ``` 执行后,你将会看到输出1-1000内的所有素数。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z小旋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值