目录
?
引言
直叙:按顺序执行? 1? 2? 3? 4? 5
判断:条件判断? 根据条件不同,执行不同任务
含义:测试表达式是否成立,若成立返回0,否则返回其他值
判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成
格式1:test 条件表达式
格式2:[ 条件表达式 ]
[ 操作符 文件或目录 ]? ?注意前后空格
[root@localhost ~]#type test
test 是 shell 内嵌
[root@localhost ~]#help test
test: test [表达式]
Evaluate conditional expression.
Exits with a status of 0 (true) or 1 (false) depending on
the evaluation of EXPR. Expressions may be unary or binary. Unary
expressions are often used to examine the status of a file. There
are string operators and numeric comparison operators as well.
The behavior of test depends on the number of arguments. Read the
bash manual page for the complete specification.
File operators:
-a FILE True if file exists.
#测试目录或文件是否存在(Exist)
-b FILE True if file is block special.
-c FILE True if file is character special.
-d FILE True if file is a directory.
#测试是否为目录(Directory)
-e FILE True if file exists.
#测试目录或文件是否存在(Exist)
-f FILE True if file exists and is a regular file.
#测试是否为文件(File)
-g FILE True if file is set-group-id.
-h FILE True if file is a symbolic link.
-L FILE True if file is a symbolic link.
#测试是否为软连接文件
-k FILE True if file has its `sticky' bit set.
-p FILE True if file is a named pipe.
-r FILE True if file is readable by you.
#测试当前用户是否有权限读取(Read)
-s FILE True if file exists and is not empty.
#是否存在且非空
-S FILE True if file is a socket.
-t FD True if FD is opened on a terminal.
#fd 文件描述符是否在某终端已经打开
-u FILE True if the file is set-user-id.
-w FILE True if the file is writable by you.
#测试当前用户是否有权限写入(Write)
-x FILE True if the file is executable by you.
#测试当前用户是否有权限执行(eXcute)
-O FILE True if the file is effectively owned by you.
#当前有效用户是否为文件属主
-G FILE True if the file is effectively owned by your group.
#当前有效用户是否为文件属组
-N FILE True if the file has been modified since it was last read.
#文件自从上一次被读取之后是否被修改过
FILE1 -nt FILE2 True if file1 is newer than file2 (according to
modification date).
FILE1 -ot FILE2 True if file1 is older than file2.
FILE1 -ef FILE2 True if file1 is a hard link to file2.
String operators:
-z STRING True if string is empty.
-n STRING
STRING True if string is not empty.
STRING1 = STRING2
True if the strings are equal.
STRING1 != STRING2
True if the strings are not equal.
STRING1 < STRING2
True if STRING1 sorts before STRING2 lexicographically.
STRING1 > STRING2
True if STRING1 sorts after STRING2 lexicographically.
Other operators:
-o OPTION True if the shell option OPTION is enabled.
-v VAR True if the shell variable VAR is set
! EXPR True if expr is false.
EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.
EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.
arg1 OP arg2 Arithmetic tests. OP is one of -eq, -ne,
-lt, -le, -gt, or -ge.
Arithmetic binary operators return true if ARG1 is equal, not-equal,
less-than, less-than-or-equal, greater-than, or greater-than-or-equal
than ARG2.
Exit Status:
Returns success if EXPR evaluates to true; fails if EXPR evaluates to
false or an invalid argument is given.
[root@localhost ~]#test -a /etc/passwd;echo $?
0
[root@localhost ~]#test -a /etc/xxxxxx;echo $?
1
[root@localhost ~]#test -e /etc/passwd;echo $?
0
[root@localhost ~]#test -e /etc/xxxxx;echo $?
1
[root@localhost ~]#[ -d /etc/sysconfig/ ];echo $?
0
[root@localhost ~]#[ -f /etc/sysconfig/ ];echo $?
1
若真,则状态码变量 $? 返回0
若假,则状态码变量 $? 返回1
[? ]? 是test的同义词? ?建议使用 [??]
[root@localhost ~]#[ -d /etc/passwd ];echo $?
1
[root@localhost ~]#[ -d /etc/sysconfig/ ];echo $?
0
[root@localhost ~]#[[ -d /etc/sysconfig ]];echo $?
0
[root@localhost ~]#[[ -d /etc/sysconfig/* ]];echo $?
1
[root@localhost ~]#[ -e /etc/passwd ];echo $?
0
[root@localhost ~]#[ -e /etc/pas ];echo $?
1
#判断文件是否存在
[[ ]]支持正则表达式
[ 整数1 -操作符 整数2 ] 公式
[root@localhost ~]#a=2
[root@localhost ~]#b=6
[root@localhost ~]#[ $a -eq $b ];echo $?
1
[root@localhost ~]#[ $a -ne $b ];echo $?
0
[root@localhost ~]#[ $a -gt $b ];echo $?
1
[root@localhost ~]#[ $a -lt $b ];echo $?
0
[root@localhost ~]#[ $a -le $b ];echo $?
0
[root@localhost ~]#[ $a -ge $b ];echo $?
1
常用的测试操作符
格式
[root@localhost ~]#str1=wsc
[root@localhost ~]#str2=wyq
[root@localhost ~]#[ $str1 = $str2 ];echo $?
1
[root@localhost ~]#[ $str1 != $str2 ];echo $?
0
[root@localhost ~]#[ -z /etc/passwd ];echo $?
1
[root@localhost ~]#[ -z /opt/rh/ ];echo $?
1
[root@localhost ~]#[ -n /opt/rh/ ];echo $?
0
[root@localhost ~]#[ -n /etc/passwd ];echo $?
0
[root@localhost ~]#str=
[root@localhost ~]#[ -z $str ];echo $?
0
[root@localhost ~]#str=" "
[root@localhost ~]#[ -z $str ];echo $?
0
[root@localhost ~]#[ -n $str ];echo $?
0
[root@localhost ~]#[ $USER = root ]&& echo true
true
[root@localhost ~]#read -p "yes/no:" ack;echo ack
yes/no:yes
ack
[root@localhost ~]#read -p "yes/no:" ack;echo ack
yes/no:no
ack
[root@localhost ~]#read -p "yes/no:" ack;echo ack
yes/no:y
ack
[root@localhost ~]#read -p "yes/no:" ack;echo ack
yes/no:1
ack
格式1:[ 表达式1 ]? 操作符? [ 表达式2 ]
格式2:命令1? 操作符? 命令2
常见条件
cmd1 && cmd2? 如果cmd1 为假,那么没有必要执行cmd2,其结果一定为假;
cmd1 成立 cmd2成立 则最终结果成立。
全真才真? 一假即假
?cmd1 || cmd2 如果cmd1 或 cmd2 有一个是真的,那么最后结果为真;
全假才假 一真即真
下面哪种写法表示如果cmd1成功执行,则执行cmd2命令
A.cmd1&&cmd2? B.cmd1|cmd2? C.cmd1;cmd2? D.cmd1||cmd2
解析:答案为A;B选项是因为cmd1或cmd2,只输出一个;C选项因为cmd1无论是否执行,还是会执行cmd2;D选项是因为如果cmd1为真为假都会执行cmd2
[root@localhost ~]#whoami
root
[root@localhost ~]#[ `whoami` = root ]&& echo "true"
true
[root@localhost ~]#[ `whoami` = ghd ]&& echo "true"
[root@localhost ~]#[ `whoami` = ghd ]&& echo "true"|| echo "false"
false
?cmd1 && cmd2 || cmd3? =? (cmd1 && cmd2) || cmd3
如果cmd1为真,才会执行cmd2,整个式子一定为真,就不需要执行cmd3
如果cmd1为假,那么不会执行cmd2,整个式子(cmd1 && cmd2)为假,然后需要执行cmd3来判断
[root@localhost ~]#df|tr -s " "|grep sda|cut -d " " -f5|tr -d %
4
[root@localhost ~]#vim scandisk.sh
#!/bin/bash
use=`df|tr -s " "|grep sda|cut -d " " -f5|tr -d %`
[ $use -ge 80 ] && echo "磁盘使用量过高" || echo "磁盘剩余量足够"
[root@localhost ~]#bash scandisk.sh
磁盘剩余量足够
如果需要通过邮箱来提醒
#!/bin/bash
use=`df|tr -s " "|grep sda|cut -d " " -f5|tr -d %`
[ $use -ge 80 ] && echo "磁盘使用量过高"|mail -s warning 123456789@qq.com || echo "磁盘剩余量足够"
[root@localhost ~]#vim p.sh
#!/bin/bash
ping -c2 -W1 $1 &>/dev/null && echo "$1 is online" || echo "$1 is offline"
#ping两个包 延迟1秒返回 将ping的内容转至垃圾箱,如果ping两个包成功,打印$!位置参数是在线的;如果ping两个包不成功,打印$1位置参数是脱机的
[root@localhost ~]#bash p.sh 192.168.241.11
192.168.241.11 is online
[root@localhost ~]#bash p.sh 192.168.241.1
192.168.241.1 is online
[root@localhost ~]#bash p.sh 192.168.241.12
192.168.241.12 is offline
[[ expression ]]用法
==? 左侧字符串是否和右侧的PATTERN相同
注意:此表达式用于[[? ]]中,PATTERN为通配符
=~? 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
注意:此表达式用于[[? ]]中:扩展的正则表达式
[root@localhost ~]#help [
[: [ 参数... ]
估值条件表达式。
是内嵌命令 "test" 的同义词,但是最后一个参数必须是
字符 `]',以匹配起始的 `['。
[[ ... ]]: [[ 表达式 ]]
执行条件命令。
根据条件表达式 EXPRESSION 的估值返回状态0或1。表达式按照
`test' 内嵌的相同条件组成,或者可以有下列操作符连接而成:
( EXPRESSION ) 返回 EXPRESSION 表达式的值
! EXPRESSION 如果 EXPRESSION表达式为假则为真,否则为假
EXPR1 && EXPR2 如果 EXPR1 和 EXPR2 表达式均为真则为真,否则为假
EXPR1 || EXPR2 如果 EXPR1 和 EXPR2 表达式中有一个为真则为真,否则为假
当使用 `==' 和 `!=' 操作符时,操作符右边的字符串被用作模式并且执行一个
匹配。当使用 `=~' 操作符时,操作符右边的字符串被当作正则表达式来进行
匹配。
操作符 && 和 || 将不对 EXPR2 表达式进行估值,如果 EXPR1 表达式足够确定
整个表达式的值。
退出状态:
根据 EXPRESSION 的值为0或1。
[root@localhost ~]#file=test.log
[root@localhost ~]#[[ $file == "*.log" ]];echo $?
1
[root@localhost ~]#[[ $file == *.log ]];echo $?
0
[root@localhost ~]#[[ $file =~ log$ ]];echo $?
0
==开启通配符;=~开启正则表达式
if是关键字? 不是命令
[root@localhost ~]#type if
if 是 shell 关键字
[root@localhost ~]#help if
if: if 命令; then 命令; [ elif 命令; then 命令; ]... [ else 命令; ] fi
根据条件执行命令。
`if COMMANDS'列表被执行。如果退出状态为零,则执行`then COMMANDS'
列表。否则按顺序执行每个 `elif COMMANDS'列表,并且如果它的退出状态为
零,则执行对应的 `then COMMANDS' 列表并且 if 命令终止。否则如果存在的
情况下,执行 `else COMMANDS'列表。整个结构的退出状态是最后一个执行
的命令的状态,或者如果没有条件测试为真的话,为零。
退出状态:
返回最后一个执行的命令的状态。
格式1:
if 判断条件 ;then
执行的命令
fi
格式2:
if 判断条件
then
执行的命令
fi
格式3:
if 判断条件;then;执行的命令;fi
[root@localhost ~]#vim scandisk.sh
#!/bin/bash
if [ `df|tr -s " "|grep sda|cut -d " " -f5|tr -d %` -ge 80 ]
then
echo "磁盘剩余严重不足"
fi
[root@localhost ~]#dd if=/dev/zero of=/boot/bigfile
[root@localhost ~]#bash scandisk.sh
磁盘剩余严重不足
if 判断条件
then
执行命令1
else
执行命令2
fi
[root@localhost ~]#vim h.sh
#!/bin/bash
systemctl status httpd &> /dev/null
if [ $? -eq 0 ]
then
echo "httpd 服务正在运行"
else
systemctl start httpd
fi
[root@localhost ~]#bash h1.sh
httpd 服务正在运行
[root@localhost ~]#systemctl stop httpd.service
[root@localhost ~]#bash h1.sh
[root@localhost ~]#systemctl status httpd.service
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since 三 2024-01-24 16:14:59 CST; 16s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 8800 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─8800 /usr/sbin/httpd -DFOREGROUND
├─8803 /usr/sbin/httpd -DFOREGROUND
├─8804 /usr/sbin/httpd -DFOREGROUND
├─8805 /usr/sbin/httpd -DFOREGROUND
├─8806 /usr/sbin/httpd -DFOREGROUND
└─8807 /usr/sbin/httpd -DFOREGROUND
1月 24 16:14:59 localhost.localdomain systemd[1]: Starting The Apache HTTP...
1月 24 16:14:59 localhost.localdomain httpd[8800]: AH00558: httpd: Could n...
1月 24 16:14:59 localhost.localdomain systemd[1]: Started The Apache HTTP ...
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]#bash h1.sh
httpd 服务正在运行
[root@localhost ~]#vim h.sh
#!/bin/bash
systemctl status httpd &> /dev/null
if [ $? -eq 0 ]
then
echo "httpd 服务正在运行"
else
systemctl start httpd
if [ $? -eq 0 ]
then
echo "服务正常启动"
else
echo “service is not running please check it”
fi
fi
[root@localhost ~]#bash h.sh
httpd 服务正在运行
[root@localhost ~]#systemctl stop httpd.service
[root@localhost ~]#bash h.sh
服务正常启动
if 判断条件
then
执行命令1
elif 判断条件
执行命令2
elif
执行命令3
......
else
执行命令n
fi
[root@localhost ~]#vim az.sh
#!/bin/bash
#安装httpd 服务 先判断 操作系统 如果是Centos 就yum 安装 如果是ubuntu apt 安装 其他暂不支持
if grep -q centos /etc/os-release
then
yum install httpd -y &>/dev/null
if [ $? -eq 0 ]
then
echo "安装成功"
else
echo "安装失败请检查"
fi
elif grep -p ubuntu /etc/os-release
then
apt install apache2 -y &>/dev/null
if [ $? -eq 0 ]
then
echo "安装成功"
else
echo "安装失败请检查"
fi
else
echo
fi
[root@localhost ~]#bash az.sh
安装成功
[root@localhost ~]#vim fenshu.sh
#!/bin/bash
#90-100 优秀 70-89 良好 60-69 及格 0-59 不及格 其他输入错误请重新输入
read -p "请输入你的分数(0-100 的正整数):" num
if [ $num -ge 90 -a $num -le 100 ]
then
echo "优秀"
elif [ $num -ge 70 -a $num -le 89 ]
then
echo "良好"
elif [ $num -ge 60 -a $num -le 69 ]
then
echo "及格"
elif [ $num -ge 0 -a $num -le 59 ]
then
echo "不及格且罚抄30遍"
else
echo "输入有误,请重新输入"
bash $0
#再运行一遍脚本
fi
[root@localhost ~]#bash fenshu.sh
请输入你的分数(0-100 的正整数):99
优秀
[root@localhost ~]#bash fenshu.sh
请输入你的分数(0-100 的正整数):85
良好
[root@localhost ~]#bash fenshu.sh
请输入你的分数(0-100 的正整数):71
良好
[root@localhost ~]#bash fenshu.sh
请输入你的分数(0-100 的正整数):60
及格
[root@localhost ~]#bash fenshu.sh
请输入你的分数(0-100 的正整数):59
不及格且罚抄30遍
[root@localhost ~]#bash fenshu.sh
请输入你的分数(0-100 的正整数):55555
输入有误,请重新输入
请输入你的分数(0-100 的正整数):11111
输入有误,请重新输入
请输入你的分数(0-100 的正整数):66
及格
[root@localhost ~]#vim bjc.sh
#!/bin/bash
read -p "请输入 1(包)2(剪)3(锤):" h
m=`echo $[RANDOM%3+1]`
#平局
if [ $h -eq $m ]
then
echo "平局"
elif [ $h -eq 1 -a $m -eq 3 -o $h -eq 2 -a $m -eq 1 -o $h -eq 3 -a $m -eq 2 ]
then
echo "你赢了"
else
echo "你输了"
fi
[root@localhost ~]#bash bjc.sh
请输入 1(包)2(剪)3(锤):1
你赢了
[root@localhost ~]#bash bjc.sh
请输入 1(包)2(剪)3(锤):2
你输了
[root@localhost ~]#bash bjc.sh
请输入 1(包)2(剪)3(锤):3
平局
鸡兔同笼,是中国古代著名典型趣题之一,记载于《孙子算经》之中。
今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
[root@localhost ~]#vim jttl.sh
#!/bin/bash
read -p "脚的数量:" jiao
read -p "头的数量:" tou
JIAO=$[jiao-tou]
#兔子和鸡各抬起一只脚
if [ $jiao -ge 0 ]
then
tujiao=$[jiao-tou-tou]
#兔子和鸡各抬起两只脚(此时鸡的脚都抬起来了,每只兔子各剩2只脚)
tnum=$[tujiao/2]
#兔脚的数量除以2代表每2只脚对应一只兔子,输出此时兔子的数量
jnum=$[tou-tnum]
#总头数量减去兔子的数量就是鸡的数量
echo "------------------------------------------------------------"
echo "鸡和兔的数量分别为:"
echo "兔的数量: $tnum"
echo "鸡的数量:$jnum"
fi
if [ $tnum -le 0 ]
then
echo "您输入的参数有误,请确认后重新输入"
bash $0
[root@localhost ~]#bash jttl.sh
[root@localhost ~]#bash jttl.sh
脚的数量:94
头的数量:35
------------------------------------------------------------
鸡和兔的数量分别为:
兔的数量: 12
鸡的数量:23
[root@localhost ~]#vim xtuser.sh
#!/bin/bash
read -p "请输入用户名:" user
if grep $user /etc/passwd &> /dev/null
then
if [ -d /home/$user ]
then
echo "该用户状态正常"
else
read -p "该用户没有家目录,是否删除该用户,请输入[yes/no]:" ask
if [ $ask == yes ]
then
echo "正在删除用户..."
userdel $user &> /dev/null;sleep 2
echo "该用户已经删除"
elif [ $ask==no ]
then
exit
fi
fi
else
echo "该用户不存在"
fi
[root@localhost ~]#useradd cxk
[root@localhost ~]#cat /etc/passwd|grep cxk
cxk:x:1001:1001::/home/cxk:/bin/bash
[root@localhost ~]#useradd -M wsc
[root@localhost ~]#cat /etc/passwd|grep wsc
wsc:x:1002:1002::/home/wsc:/bin/bash
[root@localhost ~]#bash xtuser.sh
请输入用户名:cxk
该用户状态正常
[root@localhost ~]#bash xtuser.sh
请输入用户名:wsc
该用户没有家目录,是否删除该用户,请输入[yes/no]:yes
正在删除用户...
该用户已经删除
[root@localhost ~]#cat /etc/passwd|grep wsc
case 语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写。
case 语句主要适用于以下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个 不同的条件,而 case 语句只是判断一个变量的不同取值。
[root@localhost ~]#help case
case: case 词 in [模式 [| 模式]...) 命令 ;;]... esac
基于模式匹配来执行命令。
基于 PATTERN 模式匹配的词 WORD,有选择的执行 COMMANDS 命令。
`|' 用于分隔多个模式。
退出状态:
返回最后一个执行的命令的状态。
case $i in
1)
命令1
;;
#英文状态的;
2)
命令2
;;
3)
命令3
;;
*)
命令n
esac
case 行尾必须为单词“in”,每一模式必须以右括号“)”结束。 ?双分号“;;”表示命令序列的结束。 ?模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号 “|”表示或,如“A|B”。 最后的“*)”表示默认模式,其中的*相当于通配符。?
case 语句的执行流程:首先使用“变量值”与模式 1 进行比较,若取值相同则执行模式 1 后的命令序列,直到遇见双分号“;;”后跳转至 esac,表示结束分支;若与模式 1 不相匹配, 则继续与模式 2 进行比较,若取值相同则执行模式 2 后的命令序列,直到遇见双分号“;;”后 跳转至 esac,表示结束分支……依此类推,若找不到任何匹配的值,则执行默认模式“*)” 后的命令序列,直到遇见 esac 后结束分支
[root@localhost ~]#vim case.sh
#!/bin/bash
#输入一个字符 判断输入的是字母 数字还是特殊字符
read -p "请输入一个字符:" key
case $key in
[a-z]|[A-Z])
echo "您输入的是字母"
;;
#英文分号
[0-9])
echo "您输入的是数字"
;;
*)
echo "您输入的是特殊字符"
esac
[root@localhost ~]#bash case.sh
请输入一个字符:5
您输入的是数字
[root@localhost ~]#bash case.sh
请输入一个字符:a
您输入的是字母
[root@localhost ~]#bash case.sh
请输入一个字符:A
您输入的是字母
[root@localhost ~]#bash case.sh
请输入一个字符:?
您输入的是特殊字符
方法一
[root@localhost ~]#vim test.sh
#!/bin/bash
#判断输入的是yes(y,Y,yES,YES,YeS,yeS)或者no(N,n,no,No,nO,NO)
read -p "请输入 yes 或者 no :" i
case $i in
[yY]|[yY][eE][sS])
echo "您输入的是yes"
;;
[nN]|[nN][oO])
echo "您输入的是no"
;;
*)
echo "您输入有误,请重新输入yes 或 no"
bash $0
;;
esac
[root@localhost ~]#bash test.sh
请输入 yes 或者 no :y
您输入的是yes
[root@localhost ~]#bash test.sh
请输入 yes 或者 no :yes
您输入的是yes
[root@localhost ~]#bash test.sh
请输入 yes 或者 no :YeS
您输入的是yes
[root@localhost ~]#bash test.sh
请输入 yes 或者 no :no
您输入的是no
[root@localhost ~]#bash test.sh
请输入 yes 或者 no :No
您输入的是no
方法二
[root@localhost ~]#vim test1.sh
#!/bin/bash
#判断输入的是yes(y,Y,yES,YES,YeS,yeS)或者no(N,n,no,No,nO,NO)
read -p "请输入 yes 或者 no :" i
num=`echo $i|tr 'A-Z' 'a-z'`
case $num in
y|yes)
echo "您输入的是yes"
;;
n|no)
echo "您输入的是no"
;;
*)
echo "您输入有误,请重新输入yes 或 no"
bash $0
;;
esac
[root@localhost ~]#bash test1.sh
请输入 yes 或者 no :y
您输入的是yes
[root@localhost ~]#bash test1.sh
请输入 yes 或者 no :ye
您输入有误,请重新输入yes 或 no
请输入 yes 或者 no :yes
您输入的是yes
[root@localhost ~]#bash test1.sh
请输入 yes 或者 no :YeS
您输入的是yes
[root@localhost ~]#bash test1.sh
请输入 yes 或者 no :n
您输入的是no
[root@localhost ~]#bash test1.sh
请输入 yes 或者 no :NO
您输入的是no
[root@localhost ~]#bash test1.sh
请输入 yes 或者 no :No
您输入的是no
[root@localhost ~]#vim xxgjx.sh
#!/bin/bash
cat <<EOF
----------------------------
|1.查看内存 |
|2.查看主机名 |
|3.内核 |
|4.磁盘大小 |
|5.退出工具箱 |
----------------------------
EOF
read -p "请输入选择(1-5)" num
case $num in
1)
free
echo "--------------"
bash $0
;;
2)
hostname
echo "--------------"
bash $0
;;
3)
uname -r
echo "--------------"
bash $0
;;
4)
lsblk|grep disk|awk '{print $4}'
echo "--------------"
bash $0
;;
5)
exit
;;
esac
[root@localhost ~]#bash xxgjx.sh
----------------------------
|1.查看内存 |
|2.查看主机名 |
|3.内核 |
|4.磁盘大小 |
|5.退出工具箱 |
----------------------------
请输入选择(1-5)1
total used free shared buff/cache available
Mem: 1867048 178612 1332672 1748 355764 1496312
Swap: 4194300 414148 3780152
--------------
----------------------------
|1.查看内存 |
|2.查看主机名 |
|3.内核 |
|4.磁盘大小 |
|5.退出工具箱 |
----------------------------
请输入选择(1-5)2
localhost.localdomain
--------------
----------------------------
|1.查看内存 |
|2.查看主机名 |
|3.内核 |
|4.磁盘大小 |
|5.退出工具箱 |
----------------------------
请输入选择(1-5)3
3.10.0-693.el7.x86_64
--------------
----------------------------
|1.查看内存 |
|2.查看主机名 |
|3.内核 |
|4.磁盘大小 |
|5.退出工具箱 |
----------------------------
请输入选择(1-5)4
60G
--------------
----------------------------
|1.查看内存 |
|2.查看主机名 |
|3.内核 |
|4.磁盘大小 |
|5.退出工具箱 |
----------------------------
请输入选择(1-5)5
[root@localhost ~]#vim score.sh
#!/bin/bash
read -p "请输入您的分数(0-100) : " score
[[ $score -ge 85 && $score -le 100 ]] && a="great"
[[ $score -ge 70 && $score -lt 85 ]] && a="standard"
[[ $score -ge 0 && $score -lt 70 ]] && a="false"
case $a in
great)
echo "$score分,优秀!"
;;
standard)
echo "$score 分,合格!"
;;
false)
echo "$score 分,不合格!"
;;
*)
echo "输入有误!"
esac
[root@localhost ~]#bash score.sh
请输入您的分数(0-100) : 2
2 分,不合格!
[root@localhost ~]#bash score.sh
请输入您的分数(0-100) : 18
18 分,不合格!
[root@localhost ~]#bash score.sh
请输入您的分数(0-100) : 99
99分,优秀!
[root@localhost ~]#bash score.sh
请输入您的分数(0-100) : 81
81 分,合格!
[root@localhost ~]#bash score.sh
请输入您的分数(0-100) : 79
79 分,合格!
[root@localhost ~]#bash score.sh
请输入您的分数(0-100) : 59
59 分,不合格!
[root@localhost ~]#bash score.sh
请输入您的分数(0-100) : 70
70 分,合格!
[root@localhost ~]#vim score1.sh
#!/bin/bash
read -p "请输入你的分数: " score
[ $score -eq 100 ] && a=0
[ $score -ge 90 ] &&[ $score -lt 100 ] && a=10
[ $score -ge 70 -a $score -le 89 ] && a=20
[ $score -ge 60 -a $score -le 69 ] && a=30
[ $score -ge 0 -a $score -lt 60 ] && a=40
case $a in
0)
echo "秀儿!"
;;
10)
echo "$score 分,抄10遍!"
;;
20)
echo "$score 分,抄20遍!"
;;
30)
echo "$score 分,抄30遍!"
;;
40 )
echo "$score 分,全抄30遍!"
;;
*)
echo " 输入有误! "
esac
[root@localhost ~]#bash score1.sh
请输入你的分数: 99
99 分,抄10遍!
[root@localhost ~]#bash score1.sh
请输入你的分数: 80
80 分,抄20遍!
[root@localhost ~]#bash score1.sh
请输入你的分数: 70
70 分,抄20遍!
[root@localhost ~]#bash score1.sh
请输入你的分数: 69
69 分,抄30遍!
[root@localhost ~]#bash score1.sh
请输入你的分数: 20
20 分,全抄30遍!
[root@localhost ~]#vim score2.sh
#!/bin/bash
read -p " 请输入你的分数: " score
case $score in
100 )
echo "秀儿!"
;;
9[0-9])
echo "$score 分,抄10遍!"
;;
[78][0-9])
echo "$score 分,抄20遍!"
;;
6[0-9])
echo "$score 分,抄30遍!"
;;
[0-9]|[1-5][0-9] )
echo "$score 分,全抄30遍!"
;;
*)
echo " 输入有误! "
esac
[root@localhost ~]#bash score2.sh
请输入你的分数: 80
80 分,抄20遍!
[root@localhost ~]#bash score2.sh
请输入你的分数: 91
91 分,抄10遍!
[root@localhost ~]#bash score2.sh
请输入你的分数: 70
70 分,抄20遍!
[root@localhost ~]#bash score2.sh
请输入你的分数: 55
55 分,全抄30遍!
[root@localhost ~]#bash score2.sh
请输入你的分数: 100
秀儿!
[root@localhost ~]#vim score3.sh
#!/bin/bash
read -p "请输入你的分数" score
case $score in
100)
echo "$score 你太厉害了"
;;
[89][0-9])
#80-99
echo "$score 表现得还可以嘛小伙子"
;;
[67][0-9])
#60-79
echo "$score 还好还好 你及格了 不用罚抄了"
;;
[0-9]|[1-5][0-9])
#0-9和10-59
echo "$score 你完了 卷子全抄30遍"
;;
*)
echo "输入错误,请重新输入"
esac
[root@localhost ~]#bash score3.sh
请输入你的分数100
100 你太厉害了
[root@localhost ~]#bash score3.sh
请输入你的分数89
89 表现得还可以嘛小伙子
[root@localhost ~]#bash score3.sh
请输入你的分数71
71 还好还好 你及格了 不用罚抄了
[root@localhost ~]#bash score3.sh
请输入你的分数59
59 你完了 卷子全抄30遍
[root@localhost ~]#bash score3.sh
请输入你的分数8
8 你完了 卷子全抄30遍
[root@localhost ~]#vim bjc1.sh
#!/bin/bash
read -p "请输入 1(包)2(剪)3(锤):" h
m=`echo $[RANDOM%3+1]`
case $h in
1)
h="包"
;;
2)
h="剪"
;;
3)
h="锤"
;;
esac
case $m in
1)
m="包"
;;
2)
m="剪"
;;
3)
m="锤"
;;
esac
if [ $h = $m ]
then
echo "平局"
echo "你出的是 $h"
echo "机器出的是 $m"
elif [ $h = "包" -a $m = "锤" -o $h = "剪" -a $m = "包" -o $h = "锤" -a $m = "剪" ]
then
echo "你赢了"
echo "你出的是 $h"
echo "机器出的是 $m"
else
echo "你输了"
echo "你出的是 $h"
echo "机器出的是 $m"
fi
[root@localhost ~]#bash bjc1.sh
请输入 1(包)2(剪)3(锤):1
平局
你出的是 包
机器出的是 包
[root@localhost ~]#bash bjc1.sh
请输入 1(包)2(剪)3(锤):2
你输了
你出的是 剪
机器出的是 锤
[root@localhost ~]#bash bjc1.sh
请输入 1(包)2(剪)3(锤):3
你赢了
你出的是 锤
机器出的是 剪
[root@localhost ~]#vim tbj.sh
#!/bin/bash
web1="192.168.241.11"
mysql="192.168.241.22"
docker="192.168.241.23"
read -p "请输入要去往的地址:" i
case $i in
1)
i="1"
ssh $web1
;;
2)
i="2"
ssh $mysql
;;
3)
i="3"
ssh $docker
;;
*)
echo "输入错误,请重新输入"
exit
;;
esac
[root@localhost ~]#bash tbj.sh
请输入要去往的地址:1
The authenticity of host '192.168.241.11 (192.168.241.11)' can't be established.
ECDSA key fingerprint is SHA256:k/dmSIE+ic90gNaqecVvZT0PdW+9hJf9EwJQDXY1f7w.
ECDSA key fingerprint is MD5:e1:61:2b:5d:fe:10:a9:72:1f:c2:7e:2b:5b:51:f4:7c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.241.11' (ECDSA) to the list of known hosts.
root@192.168.241.11's password:
Last login: Wed Jan 24 16:07:18 2024 from 192.168.241.1
/etc/profile
test.sh
bash_profile
bashrc
_oo0oo_
088888880
88" . "88
(| -_- |)
0\ = /0
___/'---'\___
.' \\| |// '.
/ \\||| : |||// \
/_ ||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' |_/ |
\ .-\__ '-' __/-. /
___'. .' /--.--\ '. .'___
."" '< '.___\_<|>_/___.' >' "".
| | : '- \'.;'\ _ /';.'/ - ' : | |
\ \ '_. \_ __\ /__ _/ .-' / /
====='-.____'.___ \_____/___.-'____.-'=====
'=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 永无BUG 永不宕机
[root@localhost ~]#bash tbj.sh
请输入要去往的地址:2
The authenticity of host '192.168.241.22 (192.168.241.22)' can't be established.
ECDSA key fingerprint is SHA256:CcASxxV4CvFA+6w68th3aaCYGbGB3UwaAK1xifsM/Pk.
ECDSA key fingerprint is MD5:d6:ee:2e:4d:f6:34:c5:14:0e:ef:99:8c:54:48:c6:be.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.241.22' (ECDSA) to the list of known hosts.
root@192.168.241.22's password:
Last login: Wed Jan 24 06:10:32 2024 from 192.168.241.1
* 江城子 . 程序员之歌
*
* 十年生死两茫茫,写程序,到天亮。
* 千行代码,Bug何处藏。
* 纵使上线又怎样,朝令改,夕断肠。
*
* 领导每天新想法,天天改,日日忙。
* 相顾无言,惟有泪千行。
* 每晚灯火阑珊处,夜难寐,加班狂。
[root@node2 ~]#bash tbj.sh
bash: tbj.sh: 没有那个文件或目录
[root@node2 ~]#exit
登出
Connection to 192.168.241.22 closed.
[root@localhost ~]#bash tbj.sh
请输入要去往的地址:3
The authenticity of host '192.168.241.23 (192.168.241.23)' can't be established.
ECDSA key fingerprint is SHA256:XsqlR59mxCKL1f8AGowiU4Gcond0/IZhpjiaqIsiooI.
ECDSA key fingerprint is MD5:2a:05:ae:b5:1d:48:bd:7c:95:51:73:cc:fc:b0:14:25.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.241.23' (ECDSA) to the list of known hosts.
root@192.168.241.23's password:
Last login: Thu Jan 25 03:10:22 2024 from 192.168.241.1
[root@node3 ~]#exit
登出
Connection to 192.168.241.23 closed.
[root@localhost ~]#vim menu.sh
cat <<EOF
1.粉条豆腐丝
2.过油肉
3.饺子
4.点好了
EOF
read -p "请输入数字(1-3):" num
case $num in
1)
echo "粉条豆腐丝 ¥20"
bash $0
;;
2)
echo "过油肉 ¥28"
bash $0
;;
3)
echo "饺子 ¥25"
bash $0
;;
*)
exit
esac
[root@localhost ~]#bash menu.sh
1.粉条豆腐丝
2.过油肉
3.饺子
4.点好了
请输入数字(1-3):1
粉条豆腐丝 ¥20
1.粉条豆腐丝
2.过油肉
3.饺子
4.点好了
请输入数字(1-3):2
过油肉 ¥28
1.粉条豆腐丝
2.过油肉
3.饺子
4.点好了
请输入数字(1-3):3
饺子 ¥25
1.粉条豆腐丝
2.过油肉
3.饺子
4.点好了
请输入数字(1-3):4