Shell 脚本

  Shell脚本命令的工作放肆有两种:交互式和批处理
➢ 交互式(Interactive): 用户每输入一条命令就立即执行。
➢ 批处理(Batch): 由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。

  查看SHELL变量可以发现当前系统已经默认使BASH作为命令行终端解释器了:

[root@minigametest_common server]# echo $SHELL
/bin/bash

接受参数

  $0对应的是当前Shell脚本程序的名称,$#对应的是总共有几个参数,$*对应的是所有位置的参数值,$?对应的是显示上一次命令的执行返回值,而$1,$2,$3...则分别对应着第N个位置的参数值,如图4-15所示

图4-15 Shell脚本程序中的参数位置变量.png

[root@minigametest_common server]# vim test.sh 
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*"
echo "第一个参数为$1,第2个为$2"
[root@minigametest_common server]# ./test.sh 1 ttt
当前脚本名称为./test.sh
总共有2个参数,分别是1 ttt
第一个参数为1,第2个为ttt

条件语句

按照测试对象来划分,条件测试语句可以分为4种:
➢ 文件测试语句;
➢ 逻辑测试语句;
➢ 整数值比较语句;
➢ 字符串比较语句;

              表4-3      文件测试所用的参数

运算符 作用
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行

              表4-4     可用的整数比较运算符

运算符 作用
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于
[root@minigametest_common server]# [ 10 -gt 10 ]
[root@minigametest_common server]# echo $?
1
[root@minigametest_common server]# [ 10 -eq 10 ]
[root@minigametest_common server]# echo $?
0
[root@minigametest_common server]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3789         738        1035           0        2015        2800
Swap:             0           0           0
[root@minigametest_common server]# free -m |grep Mem
Mem:           3789         738        1035           0        2015        2800
[root@minigametest_common server]# free -m |grep Mem |awk '{print $4}'
1035
[root@minigametest_common server]# FreeMem = `free -m |grep Mem |awk '{print $4}'`
-bash: FreeMem: command not found
[root@minigametest_common server]# FreeMem=`free -m |grep Mem |awk '{print $4}'`
[root@minigametest_common server]# echo $FreeMem
1035

              表4-5     常见的字符串比较运算符

运算符 作用
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空

通过判断String变量是否为空值,进而判断是否定义了这个变量:

[root@minigametest_common server]# [ -z $String]
[root@minigametest_common server]# echo $?
0

if 条件测试语句

在Liunx系统中,read是用来读取用户输入信息的命令,能够把接收到的用户输入信息赋值给后面的指定变量,-p参数用于向用户显示一定的提示信息。

root@minigametest_common server]# vim chkscore.sh
#!/bin/bash
read -p "Enter your score(0-100):" GRADE
if [$GRADE -ge 85 ] && [$GRADE -le 100]; then
echo "$GRADE is excellent"
elif [ $GRADE -ge 70 ] && [$GRADE -le 84]; then
echo "$GRADE is pass"
else
echo "$GRADE is fail"
fi
root@minigametest_common server]# ./chkscore.sh 
Enter your score(0-100):99
./chkscore.sh: line 3: [: missing `]'
./chkscore.sh: line 5: [: missing `]'
99 is fail
[root@minigametest_common server]# vim chkscore.sh
[root@minigametest_common server]# ./chkscore.sh 
Enter your score(0-100):99
99 is excellent
[root@minigametest_common server]# ./chkscore.sh 
Enter your score(0-100):80
80 is pass

for 条件循环语句

在执行脚本后,会自动使用从列表文件user.txt中获取到所有的用户名称,然后逐一使用“id 用户名”命令查看用户的信息,并使用$?判断这条命令是否执行成功,也就是判断用户是否已经存在。
/dev/null是一个被称作Liunx黑洞的文件,把输出信息重定向到这个文件等同于删除数据,可以让用户的屏幕窗口保持简洁。

[root@linuxprobe ~]# vim Example.sh
#!/ bin/bash
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "Already exists"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd -- stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
the n
echo "$UNAME , Create success"
else
echo "$UNAME , Create failure"
fi
fi
done

while条件循环语句

该脚本使用$RANDOM变量来调取出一个随机的数值(范围为0~32767),将这个随机数对1000进行取余操作,并使用expr命令取得其结果,再用这个数值与用户通过read命令输入的数值进行判断。直到用户输入的值等于expr命令取得的数值后,运行exit 0命令,终止脚本的执行。

[root@linuxprobe ~]# vim Guess.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品实际价格为 商品实际价格为 商品实际价格为 0-999 之间,猜看是多少? 之间,猜看是多少? 之间,猜看是多少? 之间,猜看是多少? "
while true
do
read -p "请输入您猜测的价格数目: 请输入您猜测的价格数目: 请输入您猜测的价格数目: 请输入您猜测的价格数目: " INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答对了,实际价格是 恭喜您答对了,实际价格是 恭喜您答对了,实际价格是 恭喜您答对了,实际价格是 恭喜您答对了,实际价格是 $PRICE"
echo "您总共猜 您总共猜 g $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ] ; then
echo "太高了! "
else
echo "太低了! "
fi
done

case条件测试语句

[root@linuxprobe ~]# vim Checkkeys.sh
#!/bin/bash
read -p "请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 Enter 键确认: 键确认: " KEY
case "$KEY" in
[a -z]|[A -Z])
echo "您输入的是 您输入的是 字母。 字母。 "
;;
[0 -9])
echo "您输入的是 您输入的是 数字。 数字。 "
;;
*)
echo "您输入的是 您输入的是 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 "
esac
[root@linuxprobe ~]# bash Checkkeys.sh
请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 Enter 键确认: 键确认: 6
您输入的是 您输入的是 数字。 数字。
[root@linuxprobe ~]# bash Checkkeys.sh
请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 Enter 键确认: 键确认: p
您输入的是 您输入的是 字母。 字母。
[root@linuxprobe ~]# bash Checkkeys.sh
请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 Enter 键确认: 键确认: ^[[15~
您输入的是 您输入的是 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,958评论 0 5
  • 菜鸟教程shell在线编辑器大目录整理: 1.第一个 Shell 脚本尝试 2.Shell 变量 3.Shell ...
    中酷男阅读 11,138评论 0 12
  • 特别说明:以下内容来自简书,链接为原文出处,一切权益归原作者所有,在此感谢原作者的分享,大家可以点击以下链接查看原...
    沈祥佑阅读 3,621评论 0 4
  • 用了caffe有一段时间了,感觉自己写shell脚本的能力有待提高,特地从菜鸟笔记处系统的看了一遍,其实学习基础就...
    yichen_china阅读 5,766评论 2 30
  • 编写Shell脚本 我经常把Shell终端解释器形容是人与计算机硬件的“翻译官”,它作为用户与Linux系统内部通...
    jayafs阅读 4,976评论 0 49

友情链接更多精彩内容