脚本初学者

期待已久的脚本终于在这一周学到了,对于脚本,我感觉就是有两点,第一:考验一个人的思维能力,如果能把你想要的结果用脚本正确的表示出来。第二:以前学的基础命令,怎么组合起来使用。达到以上两点,再难写的脚本都可以写出来的。

一、编写,执行一个脚本

       脚本的格式

        首行:#!/bin/bash  (目前学到的就以这个开头,相当于进入了下一级bash)

        不是首行:带#的都是注释

                        不带#的都是命令
        规范的脚本

        1、第一行一般为调用使用的语言

        2、程序名,避免更改文件名为无法找到正确的文件

        3、版本号

        4、更改后的时间

        5、作者相关信息

        6、该程序的作用,及注意事项

        7、最后是各版本的更新简要说明

        脚本的执行

               需要给执行权限,在命令行上指定脚本的绝对或相对路径

               直接运行解释器,将脚本作为解释器程序的参数运行

二、脚本调试

        检测脚本中的语法错误

        bash -n 脚本路径

        调试执行

        bash -x 脚本路径

        脚本初学者

三、变量

      本地变量:仅对当前SHELL有效,对子SHELL也无效

               直接输入A=123  设置本地变量 

               set查看本地和环境变量
      脚本初学者

环境变量:对当前SHELL及其子SHELL均有效。  

export A=121   设置环境变量

declare -x varname=value 也是设置环境变量

env查看环境变量

export

      脚本初学者

      位置变量:$1, $2, …来表示,用于让脚本在脚本代码 中调用通过命令行传递给它的参数

                      $0:命令本身

                      $*:传递给脚本的所有参数,全部参数合为一个字符串

                      $@:传递给脚本的所有参数,每个参数为独立的字符串

                      $#:传递给脚本的参数的个数

                      注释:$@ $* 只在被双引号包起来的时候才会有差异

                      set – – 清空所有位置变量

       脚本初学者

       脚本初学者

      只读变量:readonly name        不能修改变量

                      readonly -p  查看只读变量

      删除变量:unset name

四、 ps -ef 查看进程号   ps -ef |grep bash  查看bash的进程号

$:显示当前的PID

PPID:显示父进程的PID

SHLVL: 显示当前SHELL是几级bash

pstree 显示进程树

       -p  同时显示进程的PID

       脚本初学者

五、转译

       \完全转译

       “” 部分转译    不转译 \   `   !   $ 

       ‘’ 完全转译

       脚本初学者

六、bash中的算数运算

+, -, *, /, %取模(取余), **(乘方)在bc当中乘方是^

        实现算术运算:

(1)let var=算术表达式 

let var++  自加1    let var- – 自减1  let var+3 自加3

(2) var=$[算术表达式]

(3) var=$((算术表达式))

(4) var=$(expr arg1 arg2 arg3 …)   乘法时要转译* ,即\*

(5) declare –i var = 数值

(6) echo ‘算术表达式’ | bc

七、与,或,非 (true=1 false=2)

       与:1与1=1

             1与0=0

             0与1=0

             0与0=0

       只要有一个假则为假

       短路与 前一个为假,则不再判断第二个值

       或:1或1=1

             1或0=1

             0或1=1

             0或0=0

只要有一个真则为真

短路或,前一个为真,则不再判断第二个值

        非:!1=0     

              !0=1

八、测试

测试命令

test expression

[ expression ]

[[ expression ]]

长格式的例子:

test “$A” == “$B” && echo “Strings are equal”

test “$A” -eq “$B” && echo “Integers are equal” 

简写格式的例子:

[ “$A” == “$B” ] && echo “Strings are equal”

[ “$A” -eq “$B” ] && echo “Integers are equal

EXPRESSION1 -a EXPRESSION2 并且

EXPRESSION1 -o EXPRESSION2 或者

! EXPRESSION

必须使用测试命令进行

数值测试:

 -gt 是否大于

        -ge 是否大于等于

        -eq 是否等于

        -ne 是否不等于

        -lt 是否小于

        -le 是否小于等于

字符串测试:

= = 是否等于

> ascii码是否大于ascii码

       < 是否小于

      != 是否不等于

       =~ 左侧字符串是否能够被右侧的pattern所匹配

       以上的表达式一般用在[[ ]]中

       -z 检验字符串是否为空,空为真,非空为假

       -o 与-z相反

       用于字符串比较时的用到的操作数都应该使用引号

文本权限测试:

-r FILE:是否存在且可读

-w FILE: 是否存在且可写

-x FILE: 是否存在且可执行

-u FILE:是否存在且拥有suid权限

-g FILE:是否存在且拥有sgid权限

-k FILE:是否存在且拥有sticky权限

双目测试:

FILE1 -ef FILE2: FILE1与FILE2是否指向同一个设 备上的相同inode

FILE1 -nt FILE2: FILE1是否新于FILE2(mtime)

FILE1 -ot FILE2: FILE1是否旧于FILE

组合条件测试:

第一种方式:

COMMAND1 && COMMAND2 并且

COMMAND1 || COMMAND2 或者

! COMMAND   非

如:[[ -r FILE ]] && [[ -w FILE ]] 

第二种方式:

EXPRESSION1 -a EXPRESSION2 并且

EXPRESSION1 -o EXPRESSION2 或者

! EXPRESSION

必须使用测试命令进行

    

针对以上的内容做出了以下练习

1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。

        脚本初学者

        针对此题就是考察一些命令的使用:查看主机名:hostname 查看系统版本:cat /etc/redhat-release 查看内核版本:uname -r 查看CPU型号:cat /proc/cpuinfo 查看内存大小:cat /proc/meminfo查看硬盘大小:fdisk -l

2、编写脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和

        脚本初学者   这个只是针对第十个用户和第二十个用户。
        脚本初学者   这个针对多个用户来说,只需要把grep后面的截取内容改了即可

3、编写脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”

        脚本初学者

        ping -c 是ping的结果显示几行,-W是几秒ping一次  &> 是把错误或者正确的结果都导入黑洞里面不显示结果

4、编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满

        脚本初学者

        此题就是先把磁盘分区空间和inode的最大使用率给找出来,然后判断是否超过80%,然后用wall报警提醒用户。

5、编写脚本/root/bin/excute.sh ,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本文件

        脚本初学者

        此题就是先判断是否是普通文件,然后以取基名的方法把目录名字取出来,然后判断是否以sh后缀的既可以。

    脚本的功能就是(1)自动化常用命令(2)执行系统管理和故障排除(3)创建简单的应用程序(4)处理文本和文件

    脚本对于我们以后的工作非常方便,我们以后的工作大多数也都是写脚本的。所以对于这一块我们应该更加努力。

原创文章,作者:In summer,如若转载,请注明出处:http://www.178linux.com/83791

(0)
In summerIn summer
上一篇 2017-08-05 15:01
下一篇 2017-08-05 15:32

相关推荐

  • 计算机基础及Linux基础概述

    马哥教育网络班23期+第1周课程练习 计算机基础及Linux基础概述 一、计算机组成及其功能 1.1、概述     计算机,computer 我们在中国都称它为电脑,其实我们个人使用的计算机只是计算机家族的一部分,计算机分很多种,小型机,中型机,大型机,工作站,还有PC机,等等,其实我们家庭中使用的只能算是PC机,其实…

    Linux干货 2016-09-15
  • 4、文件通配和权限

    http://note.youdao.com/yws/public/redirect/share?id=bc0a93cca15963ed8490649892b2c31d&type=false

    Linux干货 2016-08-08
  • Linux下各类颜色文件的意思

    Linux下各类颜色文件的意思   Linux系统对在终端下的各文件进行了颜色区分,了解各个颜色文件对应的意思对是学习Linux必须要掌握的。Linux文件颜色如下图: 1、白色:表示普通文件(-) 2、蓝色:表示目录(d) 3、绿色:表示可执行文件(-) 4、红色:表示压缩文件(-) 5、浅蓝色:链接文件(l) 6、黄色:表示设备文件(c) 7、…

    Linux干货 2016-10-18
  • 磁盘管理

    磁盘管理磁盘管理 本章内容 磁盘结构 分区类型 管理分区 管理文件系统 挂载设备 管理虚拟内存 设备文件 I/O Ports: I/O设备地址 一切皆文件: open(), read(), write(), close() 设备类型: 块设备:block,存取单位“块”,磁盘 字符设备:char,存取单位“字符”,键盘 设备文件:关联至一…

    Linux干货 2016-08-26
  • Linux的哲学思想第二篇

    Linux的哲学思想 一切皆文件 物理终端 物理终端指的是显示器等硬件终端设备,文件存在于 /dev/console 这个路径下 虚拟终端 虚拟终端指的是在linux命令行连接的终端,文件存在于 /dev/tty# [1,6] 这个路径下 串行终端 指的是使用计算机串行端口连接的终端设备,文件存在于 /dev/ttyS# 这个路径下 伪终端 指的是在Xshe…

    2018-02-26
  • shell精讲

    shell精讲 shell变量        定义变量时,变量名不加美元符号($,PHP语言中变量需要) 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则: 首个字符必须为字母(a-z,A-Z)。 中间不能有空格,可以使用下划线(_)。 不能使…

    Linux干货 2016-08-21