首先来一个小程序,来查看所在目录,以及该目录下的文件

#!/bin/sh                             # “#!”指定用sh执行shell脚本
#this is to show workstation # “#” 表示注释
echo "We are currently in the following directory" # echo 表示输出
/bin/pwd #输出用户所在目录
echo # 换行
echo "This directory contains the following files"
/bin/ls #列出该目下的文件

  

1. #!指定执行脚本的shell

2. #注释行

3. 命令和控制结构

创建shell程序的步骤:

第一步:创建一个包含命令和控制结构的文件。

第二步:修改这个文件的权限使它可以执行。使用chmod   u+x

第三步:执行   ./example

(也可以使用“sh example”执行)

Shell变量:

  变量:是shell传递数据的一种方法,用来代表每个取值的符号名。

  Shell有两类变量:临时变量和永久变量。

    临时变量是shell程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量。永久变量是环境变量,其值不随shell脚本的执行结束而消失。

用户自定义变量:用户定义的变量由字母或下划线开头,由字母、数字或下划线序列组成,并且大小写字母意义不同。变量名长度没有限制。在使用变量值时,要在变量名前加上前缀“$”。

设置和使用变量:

  设置变量:习惯上用大写字母来命名变量。变量名只能以字母表中的字符开头,不能用数字。变量赋值:赋值号“=”两边应没有空格(这里要注意)。定义时赋值,如NUM=1

  将一个命令的执行结果赋给变量,如:TIME=`date`

   将一个变量赋给另一个变量,如:A =$B

   使用echo命令查看变量值。例如:echo  $A

   列出所有的变量: set

     包含多个字的变量:$NAME=“Mike Ron” 或 $NAME=‘Mike  Ron’   注意单引号与双引号的区别:

例: 我们定义了变量a=111

    echo 'a = $a'  输出为a = $a

echo "a = $a"  输出为a = 111

   # unset NAME  删除变量

位置变量和特殊变量:

  Shell解释执行用户命令时,将命令行的第一个部分作为命令名,其它部分作为参数。由出现在命令行上的位置确定的参数称为位置参数。

  ls -l file1 file2 file3

  $0 这个程序的文件名 ls -l

  $n 这个程序的第n个参数值,n=1-9

  特殊变量:

    $* 这个程序的所有参数

    $# 这个程序的参数个数

    $$ 这个程序的PID

    $! 执行上一个后台命令的PID

    $? 执行上一个命令的返回值、

在讲执行计划的时候我们讲到过系统周期性计划,然后进行系统的备份。 我们只要先编辑crontab -e 填入我们的计划,然后再将写好的脚本的绝对路径写在最后一个选项上即可。

我们在这里就给出shell脚本的书写, 本人已经验证时对的。这里没写邮件通知,只用用了write

1:首先编写crontab -e

46 19 * * * /home/helen/sysinfo.sh

2:在/home/helen/下创建sysinfo.sh shell脚本

 

#!/bin/sh
#auto mail for system /bin/date +%F >> /tmp/sysinfo #记录时间
echo "disk info : " >> /tmp/sysinfo
/bin/df -h >> /tmp/sysinfo #将硬件信息写入
echo >> /tmp/sysinfo
echo >> "online user" >> /tmp/sysinfo
/usr/bin/who | /bin/grep -v root >> /tmp/sysinfo #将在线用户写入
echo >> /tmp/sysinfo
echo "memory info" >> /tmp/sysinfo
/usr/bin/free -m >> /tmp/sysinfo #将内存信息写入
echo >> /tmp/sysinfo #write root
/usr/bin/write root < /tmp/sysinfo //通知root

  

read命令:从键盘读入数据,赋给变量  (相当于scanf 、 cin  echo相当于 print , cout)

  如:read  USERNAME

expr 命令:

  expr命令:对整数型变量进行算术运算

  例如:

    expr 3 + 5

    expr $var1 - 5

    expr  $var1 / $var2

    expr  $var3 \* 10     #乘法比较特别

       expr `expr 5 + 7`/$var4

    var4=` expr  $var1 / $var2 `

变量测试语句:

  变量测试语句:用于测试变量是否相等、 是否为空、文件类型等。

   test    测试条件   测试范围:整数、字符串、文件

变量测试语句

  字符串测试:

  test  str1=str2  测试字符串是否相等

  test  str1!=str2    测试字符串是否不相等

  test  str1      测试字符串是否不为空

  test  -n str1   测试字符串是否不为空

  test  -z  str1        测试字符串是否为空

  整数测试:

  test   int1 -eq  int2  测试整数是否相等

   test   int1 -ge  int2  测试int1是否>=int2

   test   int1 -gt  int2  测试int1是否>int2

  test   int1 -le  int2  测试int1是否<=int2

  test   int1 -lt  int2  测试int1是否<int2

  test   int1 -ne  int2  测试整数是否不相等

  文件测试:

  test -d file  指定文件是否目录

  test -f file  指定文件是否常规文件

  test -x file  指定文件是否可执行

  test -r file  指定文件是否可读

  test -w file  指定文件是否可写

  test -a file  指定文件是否存在

  test -s file  文件的大小是否非0

变量测试语句:

  变量测试语句一般不单独使用,一般做为if语句的测试条件,如:

  if   test  -d  $1  then

  …

  fi

  变量测试语句可用[]进行简化,如 test  -d  $1 等价于  [ -d $1 ]  注意[] 内两边必须有空格

例子:

  

#!/bin/sh
echo "输入要比较的两个数"
read a b
echo "您要比较的两个数为 $a $b"
if [ $a -le $b ];then
echo "最小值为 $a"
exit 0
else
echo "最小值为 $b"
exit 0
fi

  

流控制语句:

  流控制语句:用于控制shell程序的流程

  exit语句:退出程序执行,并返回一个返回码,返回码为0表示正常退出,非0表示非正常退出。  (相当于return) 例如:exit  0

  if …then …fi语句,例如:

  

#!/bin/sh

if  [ -x  /etc/rc.d/init.d/httpd ]     #判断一个文件是否可执行

then

/etc/rc.d/init.d/httpd restart

fi

  

if   条件1   then

命令1

elif   条件2   then

命令2

else

命令3

fi

  

多个条件的联合:

-a:逻辑与,仅当两个条件都成立时,结果为真。

-o:逻辑或,两个条件只要有一个成立,结果为真。

echo "please input a file name:"
read file_name
if [ -d $file_name ]
then
echo "$file_name is a directory"
elif [ -f $file_name ]
then
echo "$file_name is a common file"
elif [ -c $file_name -o -b $file_name ]
then
echo "$file_name is a device file“
else
echo "$file_name is an unknown file"
fi

 

Linux——shell简单学习(一)的更多相关文章

  1. Linux——shell简单学习(二)

    流控制语句: for…done语句 格式:for  变量   in   名字表 do  命令列表 done 例子: #!/bin/sh for DAY in Sunday Monday Tuesday ...

  2. Linux shell 菜鸟学习笔记....

    20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...

  3. Linux shell ${}简单用法

    转自:Linux shell ${}简单用法 为了完整起见,我这里再用一些例子加以说明 ${ } 的一些特异功能:假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.t ...

  4. Linux Shell编程学习笔记——目录(附笔记资源下载)

    LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...

  5. Linux shell 重定向学习笔记

    在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读 ...

  6. linux shell脚本学习笔记一

    一.文件比较运算符-e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]-d filename 如果 filename为目录,则为真 [ -d /tm ...

  7. Linux shell command学习笔记(一)

    Shell的种类有很多种,例如CSH,Bourne Shell,Korn Shell.在现在的大多数Linux发行版中,默认的Shell一般都是Bourne again shell(bash). &l ...

  8. Linux shell简单创建用户脚本

    前面介绍简单的shell编写规则. 现在开始编写一个简单的shell脚本. Linux shell介绍 编写shell脚本    1.创建脚本文件    2.根据需求,编写脚本    3.测试执行脚本 ...

  9. Linux Shell 编程学习笔记

    1:Shell Script中if语句的条件部分要以分号来分隔 2:要注意条件测试部分中的空格.在方括号的两侧都有空格 3:echo "Hi, ${a}s" 单引号中的变量不会进行 ...

随机推荐

  1. container / pull-left

    <div class="container"> <h2>实例</h2> <div class="pull-left"& ...

  2. [LeetCode] 496. Next Greater Element I_Easy tag: Stack

    You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of n ...

  3. 找出numpy array数组的最值及其索引

    在list列表中,max(list)可以得到list的最大值,list.index(max(list))可以得到最大值对应的索引 但在numpy中的array没有index方法,取而代之的是where ...

  4. pycharm Unresolved reference 无法引入包

    1. 问题描述: 在项目中P存在文件夹A.B.C,A有文件夹a和b,在a中引入b的一个类, a.py: from b import func1 虽然运行成功,但是在Pycharm中显示: Unreso ...

  5. Linux系统——MySQL基础(三)

    ### MySQL主从复制实践#### 主从复制实践准备(1)主从复制数据库实战环境准备MySQL主从复制实践对环境的要求比较简单,可以是单机单数据库多实例的环境,也可以是两台服务器,每个机器一个独立 ...

  6. MySQL创建数据表并建立主外键关系

    为mysql数据表建立主外键需要注意以下几点: 需要建立主外键关系的两个表的存储引擎必须是InnoDB. 外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型. 外键列和参照列必须创建索引, ...

  7. C#--virtual,abstract,override,new,sealed修饰符学习

    1.参考博客  http://www.cnblogs.com/oneword/archive/2009/07/02/1515279.html http://www.cnblogs.com/mygood ...

  8. 修改SQL Server 的排序规则(转)

    转自http://jimshu.blog.51cto.com/3171847/1095780/ 一.修改SQL Server服务器(实例)的排序规则 以下实验使用了SQL Server 2008 R2 ...

  9. 26最短路径之Floyd算法

    Floyd算法 思想:将n个顶点的图G“分成”很多子图 每对顶点vi和vj对应子图Gij(i=0,1,…,n-1和j=0,1,…,n-1) 每对顶点vi和vj都保留一条顶点限于子图Gij中的最短路径P ...

  10. python 文件不存在时才能写入,读写模式xt

    想向一个文件中写入数据,但是前提必须是这个文件在文件系统上不存在.也就是不允许覆盖已存在的文件内容. 可以在open() 函数中使用x 模式来代替w 模式的方法来解决这个问题.比如: >> ...