编写Shell脚本---接受、判断用户参数

2018-12-18  本文已影响0人  CC晨_程序小生

[TOC]

编写Shell脚本

Shell脚本命令的工作方式分为两种:交互式和批处理

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

1、编写简单的脚本

如果想查看当前所在工作路径并列出当前目录下所有的文件及属性信息,实现这个功能的脚本如下:

[root@centos7-01 doc]# vim example.sh
#!/bin/bash 
#For Example BY linuxprobe.com 
pwd 
ls -al

Shell脚本文件的名称可以任意,但为了避免被误以为是普通文件,建议将.sh后缀加上,以表示是一个脚本文件
在上面的example.sh脚本中出现了三种不同的元素:

执行脚本有两种方式:

# 示例---路径执行脚本
[root@centos7-01 doc]#  ./example.sh
-bash: ./example.sh: 权限不够
[root@centos7-01 doc]# chmod u+x example.sh 
[root@centos7-01 doc]# ./example.sh 
/doc
总用量 8
drwxr-xr-x.  2 root root  44 12月 11 16:37 .
dr-xr-xr-x. 18 root root 235 12月 11 10:17 ..
-rwxr--r--.  1 root root  49 12月 11 16:37 example.sh
-rw-r--r--.  1 root root  56 12月 11 10:22 practice.txt

2、接受用户的参数

Linux 内设了用于接受参数的变量,变量之间可以使用空格间隔。

各变量的作用:

# 示例---变量参数
[root@centos7-01 doc]# vim example.sh 
#!/bin/bash
# For Example BY chenchen
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*"
echo "第一个参数为$1,第二个参数为$2,...,第5个参数为$5"

[root@centos7-01 doc]# sh example.sh one two three four five six
当前脚本名称为example.sh
总共有6个参数,分别是one two three four five six
第一个参数为one,第二个参数为two,...,第5个参数为five

3、判断用户的参数

Shell脚本中条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回其他随机数值,条件测试语法的执行格式如下:
测试语句格式: [ 条件表达式 ]
切记,表达式两边均应有一个空格

3.1 条件测试语句划分---按测试对象分4种

3.2 文件测试所用的参数

3.2.1 测试 $?

用测试语句测试一个文件是否为目录,然后通过 Shell 解释器内设 $? 变量显示上一条命令的返回值

[root@study doc]# [ -d /doc ]
[root@study doc]# echo $?
0
[root@study doc]# [ -d /doc/example.sh ]
[root@study doc]# echo $?
1
3.2.2 测试一个文件是否为一般文件
[root@study doc]# [ -f /doc/example.sh ]
[root@study doc]# echo $?0
1

3.3 逻辑语句

3.3.1 逻辑“与”&&

在Shell终端中逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才执行后面的命令

[root@study ~]# [ -e /doc/example.sh ] && echo "存在"
存在
3.3.2 逻辑“或”||

等号两边必须要有空格,才能进行逻辑等于

[root@study ~]# echo $USER
root
[root@study ~]# [ $USER=root ] || echo "user"
[root@study ~]# su - chen
Last login: Wed Dec 12 09:06:43 CST 2018 on pts/0
[chen@study ~]$ [ $USER=root ] || echo "user"
[chen@study ~]$ echo $USER
chen
[chen@study ~]$ [ $USER = root ] || echo "user"
user
3.3.3 逻辑“非”!

它表示把条件测试中的判断结果取相反值

[chen@study ~]$ exit
logout
[root@study ~]# [ $USER != root ] || echo "administrator"
administrator
3.3.4 与、或、非 综合示例
[root@study ~]# [ $USER != root ] && echo "user" || echo "root"
root

3.4 整数比较运算符

整数比较运算符仅对数字操作,且不能使用等号、大于号、小于号来判断。因为等号与赋值命令符冲突,大于号和小于号分别与输出重定向和输入重定向命令符冲突。因此一定要使用规范的整数比较运算符进行操作。

[root@study ~]# [ 10 -gt 10 ]
[root@study ~]# echo $?
1
[root@study ~]# [ 10 -eq 10 ]
[root@study ~]# echo $?
0

示例:使用 free -m 命令查看内存使用量情况(单位MB),然后通过 grep Mem: 命令过滤出剩余内存量的行,使用 awk'{print $4}' 命令只保留第四列,最后用 FreeMem=`语句` 的方式把语句内执行结果复制给变量

[root@study ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            488          47          23           0         417         417
Swap:             0           0           0
[root@study ~]# free -m | grep Mem
Mem:            488          47          23           0         417         417
[root@study ~]# free -m | grep Mem: | awk '{print $4}'
23
[root@study ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`
[root@study ~]# echo $FreeMem 
22
[root@study ~]# [ $FreeMem -lt 1024 ] && echo "Insufficient Memory(内存不足)"
Insufficient Memory(内存不足)

3.5 常见的字符串比较运算符

示例1:判断String变量是否为空,进而判断是否定义了这个变量

[root@study ~]# [ -z $String ]
[root@study ~]# echo $?
0

示例2:引入逻辑运算符,判断语系LANG

[root@study ~]# echo $LANG
en_US.UTF-8
[root@study ~]# [ $LANG != "zh_CN.UTF-8" ] && echo "Not zh_CN(LANG不是汉语)"
Not zh_CN(LANG不是汉语)
上一篇 下一篇

猜你喜欢

热点阅读