Shell 脚本

2019-04-27  本文已影响0人  one_zheng

  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~
您输入的是 您输入的是 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空
上一篇下一篇

猜你喜欢

热点阅读