当前位置: > shell编程 >

SHELL脚本必备基础命令

时间:2025-02-06 10:53来源:未知 作者:IT
SHELL基础
shell是用户与linux内核之间的解释器
shell环境准备,本实验需要用到一台虚拟机A即可
 
 
查看有哪些解释器
 [root@javasv-A ~]# cat /etc/shells                  #查看shell解释器

 
使用usermod修改用户解释器
 [root@javasv-A ~]# usermod -s /bin/tcsh test #使用usermod指令修改用户解释器
 [root@javasv-A ~]# grep test /etc/passwd #从/etc/passwd过滤test用户信息
 

 
BASH基本特性
查看
 
[root@javasv-A ~]# ls #数据有颜色区分

 
重定向
 
 
覆盖重定向
 
[root@javasv-A ~]# ls  >  a.txt
[root@javasv-A ~]# cat  a.txt
 

 
追加重定向
 
[root@javasv-A ~]# ls  >>  a.txt
[root@javasv-A ~]# cat a.txt 
 

 
显示一个错误的文件
 
[root@javasv-A ~]# ls xxyyzz.txt
ls: 无法访问xxyyzz.txt: 没有那个文件或目录
[root@javasv-A ~]# ls xxyyzz.txt > b.txt                     #失败,> 收集正确信息
ls: 无法访问xxyyzz.txt: 没有那个文件或目录
[root@javasv-A ~]# ls xxyyzz.txt  2>  b.txt                  #正确,2> 收集错误信息
[root@javasv-A ~]# cat b.txt 
ls: 无法访问xxyyzz.txt: 没有那个文件或目录
 

 
收集正确和错误的信息
 
[root@javasv-A ~]# ls  a.txt  xxyzz.txt  >  b.txt
[root@javasv-A ~]# ls  a.txt  xxyzz.txt  &>  b.txt           #收集所有信息
[root@javasv-A ~]# cat b.txt 
ls: 无法访问xxyzz.txt: 没有那个文件或目录
a.      txt
 

 
管道
 
[root@javasv-A ~]# ifconfig | head -2                      #查看ip信息前两行

 
 
快捷键与Tab键补齐,常见快捷键如表所示
 
快捷键 描述
Ctrl+A 将光标移至行首
Ctrl+E 光标移至行首
Ctrl+C 终止操作
Ctrl+D 一般为结束输入
Ctrl+M 回车
Ctrl+U 删除光标至行首的所有内容·
Ctrl+W 删除光标前面的一个单词(空格间隔)
Ctrl+S 挂起、冻结终端
Ctrl+Q 接触冻结终端
Alt+. 使用前一个命令的最后一个词
方向键(上下键) 历史命令
Tab键 补齐命令、选项、路径与文件名(补齐选项需要bash-complerion 软件包)
shell脚本的设计与运行
什么是shell脚本
 
Shell脚本是一种自动化执行任务的脚本语言,可以帮助我们完成日常任务,比如文件管理、进程管理等。
脚本可以理解为功能性文件
编写问世脚本
[root@javasv-A ~]# mkdir -p /root/shell/day01
[root@javasv-A ~]# vim /root/shell/day01/first.sh
echo "Hello World"
[root@javasv-A ~]# chmod  +x /root/shell/day01/first.sh          #添加执行权限
[root@javasv-A ~]# /root/shell/day01/first.sh                    #绝对路径形式执行
Hello World
 

 
[root@javasv-A ~]# cd /root/shell/day01/   #切换目录
[root@javasv-A day01]# ./first.sh                  #相对路径执行
Hello World
 

 
脚本格式规范
脚本声明(需要的解释器、作者信息等)
注释信息(步骤、思路、用途、变量含义等)
可执行语句(操作代码)
优化刚刚的first.sh脚本
 
[root@javasv-A day01]# vim /root/shell/day01/first.sh
#!/bin/bash                            #指定解释器
#This a test program for shell.        #这是一个测试性的程序
echo "Hello World"
[root@javasv-A day01]# ./first.sh    #执行脚本
 

 
执行shell脚本
执行脚本的多种方式
 
方法一 需要为文件赋予可执行权限
绝对路径执行
相对路径执行
方法二 不需要文件有可执行权限
sh 脚本文件名
source 脚本文件名
方法一
脚本在执行的时候要有执行(x)权限,否则会报错
 
[root@javasv-A day01]# chmod -x first.sh 
[root@javasv-A day01]# ./first.sh                     #报错
-bash: ./first.sh: 权限不够
[root@javasv-A day01]# /root/shell/day01/first.sh     #报错
-bash: /root/shell/day01/first.sh: 权限不够
 

 
方法二
不需要文件有可执行权限,指定解释器执行脚本
 
[root@javasv-A day01]# sh first.sh        #指定sh来执行first.sh
[root@javasv-A day01]# bash first.sh  #指定bash解释器执行first.sh
 

 
实验
[root@javasv-A day01]# vim tmp.sh #编写tmp.sh
#!/bin/bash
exit
[root@javasv-A day01]# sh tmp.sh        #指定运行脚本,没有关闭终端
 

 
[root@javasv-A day01]# vim tmp.sh #编写tmp.sh
#!/bin/bash
exit
[root@javasv-A day01]# source  tmp.sh #执行tmp.sh,会关闭终端
 

 
总结:
 
指定解释器会新开子进程
使用source不会新开子进程
变量
自定义变量
环境变量(变量名通常大写,有操作系统维护)
位置变量(bash内置变量,存储脚本执行时的参数)
预定义变量(bash内置变量,可以调用但是不能赋值或修改)
自定义变量(用户自主设置)
定义变量
 
可以是数字,字母,下划线
变量名不能使用特殊符号,会报错
不能以数字开头
查看变量
 
echo ${变量名}
echo $变量名
定义变量
 
[root@javasv-A ~]# a=11
[root@javasv-A ~]# echo $a            #调用变量,查看变量的值
[root@javasv-A ~]# a=33              #变量名已经存在,再次赋值,里面的内容会被覆盖
[root@javasv-A ~]# echo $a #调用变量,查看变量的值
 

 
[root@javasv-A ~]# a)=11 #变量包含特殊符号,所以定义失败
-bash: 未预期的符号 `)' 附近有语法错误
[root@javasv-A ~]# 3a=33 #变量数字开头,所以定义失败
bash: 3a=33: 未找到命令...
 

 
[root@javasv-A ~]# a_0=11 #没有违规,所以成功
[root@javasv-A ~]# _a=11 #没有违规,所以成功
[root@javasv-A ~]# _0=11 #没有违规,所以成功
 

 
[root@javasv-A ~]# x=RockyLinux
[root@javasv-A ~]# echo $x            #成功
[root@javasv-A ~]# echo ${x}        #成功
 

 
若想要显示Hongbei6.8
 
[root@javasv-A ~]# echo $x8.6          #失败,会显示.6,此时是把$x8看成一个变量名

 
加上{}可以成功
 
[root@javasv-A ~]# echo ${x}8.6 #输出RockyLinux8.6
[root@javasv-A ~]# echo ${x}9.1 #输出RockyLinux9.1
 

 
取消变量
 
[root@javasv-A ~]# unset x #取消变量
[root@javasv-A ~]# echo $x
 

 
环境变量
存储在/etc/profile或~/.bash_profile
命令env可以列出所有环境变量
环境变量通常是大写字母
[root@javasv-A ~]# echo $PATH              #命令搜索的路径变量
[root@javasv-A ~]# echo $PWD              #返回当前工作目录
/root
[root@javasv-A ~]# echo $USER            #显示当前登录的用户
root
[root@javasv-A ~]# echo $UID                #显示当前用户的uid

 
[root@javasv-A ~]# echo $HOME          #显示当前用户的家目录
/root
[root@javasv-A ~]# echo $SHELL            #显示当前的SHELL
/bin/bash 
 

 
位置变量
存储脚本时执行的参数
$1 $2 $3 …$9 ${10} ${11} … #从10开始位置变量需要加{}
[root@javasv-A ~]# vim /root/shell/day01/vars.sh
#!/bin/bash
echo $1
echo $2
echo $3
 

 
[root@javasv-A ~]# chmod +x /root/shell/day01/vars.sh 
[root@javasv-A ~]# /root/shell/day01/vars.sh aa bb cc       #执行脚本,传递参数
aa
bb
cc
 

 
案例
编写一个user.sh脚本,使用它创建用户
[root@javasv-A ~]# vim /root/shell/day01/user.sh
#!/bin/bash
useradd "$1" #创建用户
echo "$2" | passwd --stdin $1 #设置密码
 

 
[root@javasv-A ~]# chmod +x /root/shell/day01/user.sh
[root@javasv-A ~]# /root/shell/day01/user.sh tom 123 #执行脚本
[root@javasv-A ~]# /root/shell/day01/user.sh jim 123 #执行脚本
 

 
预定义变量
用来保存脚本程序的执行信息,可以直接使用这些变量,但是不能为这些变量赋值
 
$?:执行上一条命令的返回状态,0为正确,非0为错误
[root@javasv-A ~]# ls /etc/hosts #执行命令成功
/etc/hosts
[root@javasv-A ~]# echo $?            #返回值为0,正确
 

 
[root@javasv-A ~]# ls /xxxxxyyyy      #执行命令错误   
ls: 无法访问/xxxxxyyyy: 没有那个文件或目录
[root@javasv-A ~]# echo $? #返回值为非0,失败
 

 
其他几个预定义变量的测试
 
[root@javasv-A ~]# vim /root/shell/day01/pre.sh
#!/bin/bash
echo $0             #执行脚本的名字
echo $$             #当前脚本的进程号
echo $#             #位置变量的个数
echo $*             #所有位置变量
 


 
[root@som7 ~]# chmod  +x /root/shell/day01/pre.sh
[root@som7 ~]# /root/shell/day01/pre.sh  a b c d
/root/shell/day01/pre.sh
46608
4
a b c d
 


 
变量的扩展运用
多种引号的区别
双引号的应用
使用双引号可以界定一个完整字符串。
[root@javasv-A ~]# touch a b c            #创建了三个文件
[root@javasv-A ~]# touch "a b c"            #创建1一个文件
[root@javasv-A ~]# ls -l
 


 
[root@javasv-A ~]# rm -rf  a b c            #删除三个文件
[root@javasv-A ~]# rm -rf  "a b c"        #删除一个文件
 

 
单引号的应用
界定一个完整的字符串,并且可以实现屏蔽特殊符号的功能。
当双引号里面有变量时,会被扩展出来,也就是会取变量的值
[root@javasv-A ~]# hi="world"
[root@javasv-A ~]# echo "$hi"               #成功
world
[root@javasv-A ~]# echo '$hi'               #失败,当成一个字符串
$hi
 

 
当没有特殊符号时,单引号和双引号的含义是一样的
 
[root@javasv-A ~]# touch "a b c"
[root@javasv-A ~]# touch 'c d e'
 

 
练习单引号和双引号的区别
 
[root@javasv-A ~]# echo "$USER id is $UID" #调用变量
root id is 0
[root@javasv-A ~]# echo '$USER id is $UID' #不调用变量
$USER id is $UID
 

 
反撇号或$()的应用
使用反撇号``或$()时,可以将命令执行的标准输出作为字符串存储,因此称为命令替换。
[root@javasv-A ~]# grep root /etc/passwd
[root@javasv-A ~]# test=`grep root /etc/passwd` #定义变量,内容为命令输出结果
[root@javasv-A ~]# echo $test
 

 
[root@javasv-A ~]# test2=$(grep root /etc/passwd) #定义变量,内容为命令输出结果
[root@javasv-A ~]# echo $test2
 

 
read命令定义变量
使用read命令从键盘读取变量值
-p: 指定提示信息
-s: 屏蔽输入(键盘输入内容,在屏幕上不显示)
-t: 可指定超时秒数(指定秒数不输入,直接退出)
read基本用法
 
执行后从会等待并接受用户输入(无任何提示的情况),并赋值给变量:
[root@javasv-A ~]# read iname #定义变量iname
123 #从键盘输入123作为iname的值
[root@javasv-A ~]# echo $iname #输出变量iname
123
 

 
虽然可以赋值。但是屏幕上没有任何提示信息,在未来写脚本的时候不太方便,可以加上-p选项,给出提示
 
[root@javasv-A ~]# read -p "请输入用户名:" iname #定义变量
请输入用户名:tom
[root@javasv-A ~]# echo $iname #输出变量
tom
 


 
案例
创建一个脚本,通过read定义变量创建用户,更改密码
 
[root@javasv-A ~]# vim /root/shell/day01/read.sh
#!/bin/bash
read -p "请输入用户名:" name
read -p "请输入密码:"   pass
useradd $name
echo "$pass" | passwd --stdin $name
 


 
[root@javasv-A ~]# chmod +x /root/shell/day01/read.sh
[root@javasv-A ~]# /root/shell/day01/read.sh 
请输入用户名:user2
请输入密码:a
更改用户 user2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
 


 
但是此时密码是名为显示的,不安全,可以使用-s参数,不显示终端输入的信息
 
[root@javasv-A ~]# vim /root/shell/day01/read.sh
read -p "请输入用户名:" name
read -s -p "请输入密码:"   pass
useradd $name
echo "$pass" | passwd --stdin $name
 


 
[root@javasv-A ~]# /root/shell/day01/read.sh 
请输入用户名:user3
请输入密码:
更改用户 user3 的密码 。
passwd:所有的身份验证令牌已经成功更新。
 


 
[root@javasv-A ~]# read -t 3 iname               #3秒不输入直接退出

 
条件测试
语法格式:使用 [ 表达式 ],表达式两边至少要留一个空格。
字符串测试
是否为空 [ -z 字符串 ]
[root@javasv-A ~]# echo $TT
[root@javasv-A ~]# [ -z $TT ]          #T为空吗
[root@javasv-A ~]# echo $?            #是,返回值为0
 


 
[root@javasv-A ~]# TT="hello"
[root@javasv-A ~]# [ -z $TT ]          #T为空吗
[root@javasv-A ~]# echo $?            #否,返回值非0
 


 
等于: [ 字符串1 == 字符串2 ]
 
[root@javasv-A ~]# [ a == a ] #判断a==a
[root@javasv-A ~]# echo $?            #查看返回值

 
[root@javasv-A ~]# [ a == c ] #判断a==c
[root@javasv-A ~]# echo $? #查看返回值
 


 
变量和常量的判断
 
[root@javasv-A ~]# [ $USER == root ] #环境变量USER的值是root吗
[root@javasv-A ~]# echo $?

 
[root@javasv-A ~]# [ $USER == tom ] #环境变量USER的值是tom吗
[root@javasv-A ~]# echo $?
 


 
不等于[ 字符串1 != 字符串2 ]
 
[root@javasv-A ~]# [   $USER != tom   ] #环境变量USER的值不是tom
[root@javasv-A ~]# echo $?
 


 
整数值比较
格式:[ 整数值1 操作符 整数值2 ]
 
-eq:等于
-ne:不等于
-gt:大于
-ge:大于等于
-lt:小于
-le:小于等于
参与比较的必须是整数(可以调用变量),比较非整数值时会出错:
 
常量与常量比较
小于
 
[root@javasv-A ~]# [ 3 -lt 8 ]
[root@javasv-A ~]# echo $?
 


 
大于
 
[root@javasv-A ~]# [ 3 -gt 2 ]
[root@javasv-A ~]# echo $?
 


 
等于
 
[root@javasv-A ~]# [ 3 -eq 3 ]
[root@javasv-A ~]# echo $?
 


 
小于等于
 
[root@javasv-A ~]# [ 3 -le 3 ]
[root@javasv-A ~]# echo $?
 


 
大于等于
 
[root@javasv-A ~]# [ 3 -ge 1 ]
[root@javasv-A ~]# echo $?
 


 
常量与变量的比较
判断计算机登录的用户
 
[root@javasv-A ~]# who | wc -l
[root@javasv-A ~]# [ $(who | wc -l)  -ge  2 ]
[root@javasv-A ~]# echo $?
 


 
运算
四则运算:+ - * /
 
求模取余:%
 
计算练习
 
[root@javasv-A ~]# echo $[1+1] #计算1+1
[root@javasv-A ~]# echo $[10-2] #计算10-2
[root@javasv-A ~]# echo $[2*2] #计算2*2
[root@javasv-A ~]# echo $[6/3] #计算6/3
[root@javasv-A ~]# echo $[10%3] #取10/3的余数
 


 
变量计算
 
[root@javasv-A ~]# a=10
[root@javasv-A ~]# b=20
[root@javasv-A ~]# echo $[a+b] #计算变量a+变量b
 

 
常量与常量的比较
文件状态的测试
格式: [ 操作符 文件或目录 ]
-e 判断对象是否存在(不管是目录还是文件),存在则结果为真
[root@javasv-A ~]# [ -e /etc ]
[root@javasv-A ~]# echo $?
 


 
[root@javasv-A ~]# [ -e /etc/hosts ]
[root@javasv-A ~]# echo $?
 


 
[root@javasv-A ~]# [ -e /etc/xxyy ]
[root@javasv-A ~]# echo $?
 

 
-d 判断对象是否为目录(存在且是目录),是则为真
 
[root@javasv-A ~]# [ -d /etc/hosts ]
[root@javasv-A ~]# echo $?
1
[root@javasv-A ~]# [ -d /etc/ ]
[root@javasv-A ~]# echo $?
 

 
-f 判断对象是否为文件(存在且是文件)是则为真
 
[root@javasv-A ~]# [ -f /etc/ ]
[root@javasv-A ~]# echo $?
1
[root@javasv-A ~]# [ -f /etc/hosts ]
[root@javasv-A ~]# echo $?
 


 
if语句
if单分支
if单分支的语法组成:
 
if  条件测试;then  
命令序列
fi
 


 
if  条件测试
then 命令序列
fi
 


 
应用案例
判断用户名与密码是否为空
 
[root@javasv-A ~]# cd /root/shell/day01
 
[root@javasv-A day01]# vim user_v1.sh
#!/bin/bash
read -p "请输入用户名:" user
read -s -p "请输入密码:" pass
if [ ! -z "$user" ];then
useradd "$user"
fi
if [ ! -z "$pass" ];then
     echo "$pass" | passwd --stdin "$user"
fi
echo
 



 
测试,输入用户名和密码
 
[root@javasv-A day01]# chmod  +x user_v1.sh 
[root@javasv-A day01]# ./user_v1.sh 
请输入用户名:testuser        #输入用户名
请输入密码:更改用户 testuser 的密码 。
passwd:所有的身份验证令牌已经成功更新。
 



 
测试,直接回车
 
[root@javasv-A day01]# ./user_v1.sh 
请输入用户名:            #直接回车
请输入密码:                  #直接回车
 


 
优化脚本,使用更简单的语句书写脚本,合并if语句
 
[root@javasv-A day01]# vim user_v2.sh
#!/bin/bash
read -p "请输入用户名:" user
read -s -p "请输入密码:" pass
if [ ! -z "$user" ] && [ ! -z "$pass" ];then
    useradd "$user"
    echo "$pass" | passwd --stdin "$user"
fi
 


 
[root@javasv-A day01]# chmod +x user_v2.sh 
[root@javasv-A day01]# ./user_v2.sh 
请输入用户名:testuser2
请输入密码:更改用户 testuser2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
 


 
if双分支
if双分支的语法组成:既可以执行成功的命令,也可以执行失败的命令
if  条件测试;then
命令序列1
else  
命令序列2
fi
 


 
应用案例
测试主机是否能ping通,需要用户输入一个参数,比如一个IP或者域名
 
[root@javasv-A day01]# vim if_ping.sh
#!/bin/bash
if [ -z "$1" ];then
      echo -n "用法:脚本"
      echo -e "\033[32m域名或IP\033[0m"
      exit
fi
ping -c2 -i0.1 -W1 "$1" &> /dev/null
 
if [ $? -eq 0 ];then
echo "$1 is up"
else
    echo "$1 is down"
fi
 


 
[root@javasv-A day01]# chmod +x if_ping.sh 
[root@javasv-A day01]# ./if_ping.sh 
用法:脚本域名或IP
 



 
[root@javasv-A day01]# ./if_ping.sh  192.168.4.7
192.168.4.7 is up
[root@javasv-A day01]# ./if_ping.sh  192.168.10.1
192.168.10.1 is down
 


 
if多分支
if多分支:针对多个条件分别执行不同的操作
if    条件测试1 ;then  
命令序列1
elif  条件测试2 ;then  
命令序列2
else
命令序列n
fi
 



 
应用案例
[root@javasv-A day01]# echo $RANDOM             #系统随机生成的数字
[root@javasv-A day01]# vim guess_num.sh
#!/bin/bash
clear
num=$[RANDOM%10+1]
read -p "请输入1-10之间的整数:" guess
if [ $guess -eq $num ];then
      echo "恭喜你,才猜对了,就是$num"
elif [ $guess -lt $num ];then
      echo "Oops,猜小了"
else
      echo "Oops,猜大了"
fi
 


 
[root@javasv-A day01]# chmod +x guess_num.sh
[root@javasv-A day01]# ./guess_num.sh
请输入1-10之间的整数:6
Oops,猜大了
 


 
for循环
根据变量的不同取值,重复执行命令序列(for循环使用场合,在知道循环次数的时候使用)
for循环的语法结构:第一种格式
 
for  变量名  in  值列表
do
命令序列
done
 


 
for循环范例,循环输出数字和字符
 
[root@javasv-A ~]# cd /root/shell/day01/
[root@javasv-A day01]# vim for_demo1.sh
#!/bin/bash
for i in 1 8 ab 99 qq
do
       echo "I am $i"
done
 


 
for循环的语法结构:第二种格式
 
for  ((初值;条件;步长))
do
   命令序列
done
 


 
案例:
 
[root@javasv-A day01]# vim for_demo2.sh
#!/bin/bash
for ((i=1;i<=5;i++))
do
      echo "I am $i"
done
 


 
[root@javasv-A day01]# chmod +x for_demo2.sh 
[root@javasv-A day01]# ./for_demo2.sh
 


 
循环创建10个系统账户(有规律的创建)
 
[root@javasv-A day01]# vim for_user.sh
#!/bin/bash
for i in {1..10}
do
       useradd test$i
      echo 123456 | passwd --stdin test$i
done
 



 
[root@javasv-A day01]# chmod +x for_user.sh 
[root@javasv-A day01]# ./for_user.sh
 

 
批量创建系统账户(无规律的创建,既可以读取用户名列表文件创建系统账户)
 
[root@javasv-A day01]# vim user.txt             #创建系统用户的文件
ocean
book
page
 

 
[root@javasv-A day01]# vim user.sh
#!/bin/bash
for i in $(cat user.txt)
do
       useradd $i
       echo 123456 | passwd --stdin $i
done
 


 
[root@javasv-A day01]# chmod  +x user.sh 
[root@javasv-A day01]# ./user.sh
 

 
while循环
反复测试条件,只要成立就执行命令序列(死循环或者条件循环时使用【不知道循环次数时】)
while循环的语法结构:
 
while  条件测试
do
   命令序列
done
 


 
死循环语法结构
 
while :
do
  命令序列
done
 


 
练习while循环基本用法
 
定义i=1判断$i是否小于等于5,条件成立则执行循环语句
 
[root@javasv-A day01]# vim while_1.sh
#!/bin/bash
i=1
while [ $i -le 5 ]
do
       echo $i
done
 


 
定义i=1判断i 是否小于等于 5 ,条件成立则显示 i是否小于等于5,条件成立则显示i是否小于等于5,条件成立则显示i,并执行let i++,如果条件失败,则循环结束
 
[root@javasv-A day01]# vim while_2.sh
#!/bin/bash
i=1
while [ $i -le 5 ]
do
     echo $i
      let i++
done
 
[root@javasv-A day01]# chmod +x while_1.sh
[root@javasv-A day01]# chmod +x while_2.sh
[root@javasv-A day01]# ./while_1.sh          #ctrl+C结束循环
[root@javasv-A day01]# ./while_2.sh
 
死循环脚本,输出hello word 和 nihao
 
[root@javasv-A day01]# vim while_3.sh
#!/bin/bash
while :
do
       echo hello world
       echo nihao
done
 
[root@javasv-A day01]# chmod +x while_3.sh
[root@javasv-A day01]# ./while_3.sh
 
案例
使用while循环批量创建有规律的用户,定义两个变量PREFIX和i,使用while循环,判断i小于等于5,条件满足会执行创建用户的命令,否则则退出脚本
[root@javasv-A day01]# vim uaddwhile.sh
#!/bin/bash
PREFIX="tuser"
i=1
while [ $i -le 5 ]
do
       useradd ${PREFIX}$i
       echo 123456 | passwd --stdin ${PREFIX}$i &> /dev/null
       let i++
done
 
[root@javasv-A day01]# chmod +x uaddwhile.sh 
[root@javasv-A day01]# ./uaddwhile.sh
 
改编随机猜数脚本,可以无限次猜数,直到猜对才退出
[root@javasv-A day01]# vim guess_num2.sh
#!/bin/bash
num=$[RANDOM%10+1]
while :
do
      read -p "请输入1-10之间的整数:" guess
      if [ $guess -eq $num ];then
             echo "恭喜,猜对了,就是$num."
             exit    
      elif [ $guess -lt $num ];then
             echo "Oops,猜小了."
      else 
             echo "Oops,猜大了."
fi
done
 
[root@javasv-A day01]# chmod +x guess_num2.sh 
[root@javasv-A day01]# ./guess_num2.sh
 

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容