1.接收用户的参数:

Shell脚本为了能够让用户更灵活的完成工作需求,可以在执行命令时传递参数:(命令名 参数1 参数2...)

Shell预定义变量:

$0  当前执行Shell脚本的程序名

$1-9,${10},${11}...  

$#  一共有多少个参数

$*  所有位置变量的值

$?  判断上一条命令是否执行成功,0为成功,非0为失败。

eg.

创建并编辑Demo.sh:

vim Demo.sh

编辑内容如下:

#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*"
echo "第1个参数为$1,第5个为$5"

2.判断用户的参数

Shell 脚本有时还要判断用户输入的参数,例如像mkdir命令一样,当目录不存在则创建,若已存在则报错,条件测试语句能够测试特定的表达式是否成立,当条件成立时返回值为0,否则返回其他数值。

格式:[ 条件表达式 ]     (两边均有一个空格)

细分测试语句有:文件测试、逻辑测试、整数值比较、字符串比较

文件测试:[ 操作符 文件或目录名 ]

-d  测试是否为目录

-e  测试文件或目录是否存在

-f  判断是否为文件

-r  测试当前用户是否有权限读取

-w  测试当前用户是否有权限写入

-x  测试当前用户是否有权限执行

eg.

判断/home是否为目录:

[ -d /home ]

显示上一条命令的返回值,非0则为失败,即不是目录:

echo $?

判断/home/Demo.sh是否为文件:

[ -d /home/Demo.sh ]

符号&&代表逻辑上的“与”,当前面的命令执行成功才会执行后面的命令,判断/home/Demo.sh设备是否存在,若存在则输出Exit:

[ -e /home/Demo.sh ] && echo "Exit"

逻辑测试:[ 表达式1 ] 操作符 [ 表达式2 ]

&&  逻辑的与,“而且”的意思

||  逻辑的或,“或者”的意思

!  逻辑的否

eg.

USER变量是当前登录的用户名:

echo $USER

若当前登录的用户不是root,则输出user,执行后结果为空:

[ $USER != root ] && echo "user"

登录ftpuser,再来测试便输出user字样:

换回root用户后用加强版的判断语句,非root用户则输出user,若是root则直接输出root:

[ $USER != root ] && echo "user" || echo "root"

这里,请思考一下&&与||的逻辑含义,因为前面的&&不成立,所有后面的||才会执行。

整数值比较:[ 整数1 操作符 整数2 ]

-eq  判断是否等于

-ne  判断是否不等于

-gt  判断是否大于

-lt  判断是否小于

-le  判断是否等于或小于

-ge  判断是否大于或等于

比较10是否大于10:

[ 10 -gt 10 ]

比较10是否等于10:

[ 10 -eq 10 ]

获取当前可用的内存量,并将此值赋值给变量FreeMem:

首先用free -m 查看以m为单位的内存使用情况,然后grep Mem:过滤出剩余内存的行,最后用awk '{print $3}'过滤只保留第三列,而FreeMem='语句'则表示执行里面的语句后赋值给变量。

FreeMem=`free -m | grep Mem:| awk '{print $3}'`

FreeMem=``(这里的`是反引号,Tab键的上面,1的左边)

FreeMem=`free -m | grep Mem:| awk '{print $3}'`

判断此值是否小于2048(单位是M),若小于则提示内存不足:

[ $FreeMem -lt 2048 ] && echo "内存不足"

字符串比较:[ 字符串1 操作符 字符串2 ]

操作符:

=  比较字符串内容是否相同

!=  比较字符串内容是否不同

-z  判断字符串内容是否为空

判断String变量是否为空值:

[ -z $String ]

上一条命令执行成功,说明变量String确实为空值:

echo $?

输出当前的系统语言:

echo $LANG

判断当前的系统语言是否为英文,否则输出“不是英文”:

[ $LANG != "en.US" ] && echo "不是英文"

Linux就该这么学--Shell脚本基本应用的更多相关文章

  1. Linux就该这么学--Shell脚本条件语句(二)

    1.for条件语句 先读取多个不同的变量值,然后逐一执行同一组命令. 从列表文件中读取主机地址,逐个测试是否在线. 从ipadds.txt中读取主机地址后赋值给HLIST变量后逐个ping列表中的主机 ...

  2. Linux就该这么学--Shell脚本条件语句(一)

    1.条件测试语句能够让Shell脚本根据实际工作灵活调整工作内容,例如判断系统的状态后执行指定的工作,或创建指定数量的用户,批量修改用户密码,这些都可以让Shell脚本通过条件测试语句完成. if条件 ...

  3. linux c程序中获取shell脚本输出的实现方法

    linux c程序中获取shell脚本输出的实现方法 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作. ...

  4. Linux自动安装JDK的shell脚本

    Linux自动安装JDK的shell脚本 A:本脚本运行的机器,Linux B:待安装JDK的机器, Linux 首先在脚本运行的机器A上确定可以ssh无密码登录到待安装jdk的机器B上,然后就可以在 ...

  5. Linux学习Day6:编写Shell脚本

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

  6. linux 的基本操作(编写shell 脚本)

    终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要.下面笔者就带你正式进入shell脚本的世界吧. 到现 ...

  7. Linux 小知识翻译 - 「Shell 脚本」

    这次说说「Shell 脚本」. 根据上回的介绍,Shell就是「作为联系Linux和用户的接口而存在的软件」.在Linux环境中,通过Shell来操作系统很普遍. 这里,考虑到有时候可能想要「多次的进 ...

  8. linux批量修改文件名的shell脚本

    linux中批量修改文件名的shell脚本代码,主要是使用了rename,结合shell,喜欢的朋友可以参考下 使用 rename 命令  ========================  NAME ...

  9. linux C程序中获取shell脚本输出(如获取system命令输出)

    转载自 http://blog.csdn.net/hjxhjh/article/details/7909518 1. 前言 Unix 界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些 ...

随机推荐

  1. hdu 4823 Energy Conversion 构造

    题目链接:HDU - 4823 魔法师百小度也有遇到难题的时候——现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力.过了许久,百小度终于读 ...

  2. 【转】彻底弄懂Java中的equals()方法以及与"=="的区别

    彻底弄懂Java中的equals()方法以及与"=="的区别 一.问题描述:今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差. ...

  3. 为树莓派(Raspberry pi 2)安装raspbian系统,并用windows自带的远程桌面连接登录

    准备工作 树莓派2开发板(保险起见,请装上散热片和风扇): 手机充电器和数据线(输出电压为5V,输出电流为1~2A,电流视开发板上所接附件多少而定): class10 sd小卡,还需要卡架或读卡器: ...

  4. struts2拦截器实现session超时返回登录页面(iframe下跳转到其父页面)

    需求:session超时时,返回登录页面,由于页面嵌套在iframe下,因此要跳转到登录页面的父页面,但是首页,登录页面等不需要进行跳转 实现: java文件:SessionIterceptor.ja ...

  5. Hadoop一些问题总结

    1.运行mr程序出错 connecting to resoucemanager retrying .... retrying ..... 原因是没有启动yarn或者启动失败 2.初始化工作目录结构 h ...

  6. 通用礼品卡接口文档(KFC、必胜客、GAP等)

    通用礼品卡接口文档,集于各商家(KFC.必胜客.GAP等)实体卡和会员卡的API虚拟卡,可用于线上/下消费.移动支付. 1.API 1.1商品列表 接口地址:http://v.juhe.cn/gift ...

  7. sql执行顺序图

    http://www.16aspx.com/cmsimages/20130325/664845013.png

  8. Cocos2d-x中Vector<T>容器以及实例介绍

    Vector<T> 是Cocos2d-x 3.x推出的列表容器,因此它所能容纳的是Ref及子类所创建的对象指针,其中的T是模板,表示能够放入到容器中的类型,在Cocos2d-x 3.x中T ...

  9. SpringMVC:前台jsp页面和后台传值

    前台jsp页面和后台传值的几种方式: 不用SpringMVC自带的标签 前台---->后台,通过表单传递数据(): 1.jsp页面代码如下,  modelattribute 有没有都行 < ...

  10. Linux是怎么启动的(整理)

    昨天笔试考了一道关于linux系统启动的过程,当时没答上来,现在整理出来(其实并不复杂). 按下电源按钮的直到欢迎页出来之后,linux总共做的事可以分为五步来完成. 1.  BIOS加电自检: 加电 ...