Day1-shell

基础

正则表达式

Sed

Awk

Expect

shell基础

脚本,实现某种功能,且有执行权限的文件

遵揗语言格式、功能——变量函数数组流程控制

系统命令

脚本格式

#!/bin/bash            定义脚本shell

功能体————内容

执行脚本方法

./脚本名即可————前提该用户有执行权限

用户——>shell——>内核——>硬件

内核——资源分配和进程调度

当前支持的shell,没有的可以安装

系统默认为/bin/bash

可以使用    type    命令——是否为内置或外置命令

内置功能

更改histroy历史命令次数——默认为1000

该配置是全局——所有用户

[root@localhost ~]# vim /etc/profile

HISTSIZE=1000

每个用户家目录下有一个

该配置是root用户,同样,也可以设置别的用户

[root@localhost ~]# ls /root/.bash_*

/root/.bash_history /root/.bash_logout /root/.bash_profile

别名记录[root@localhost ~]# alias

全局生效

[root@localhost ~]# vim /etc/bashrc

用户生效

[root@localhost ~]# vim /root/.bashrc

管道

命令1    |    命令2    |    命令3|

重定向——修改数据输入或输出设备

    标准输入/dev/stdin        0    键盘

    标准输出/dev/stdout        1    显示器

    标准错误输出/dev/stdout    2    显示器

重写向输出

    >    覆盖

    >>     追加

重写向输入

    <     覆盖输入

    <<     追加输入

重写向错误输出————也可以将错误信息记录到文件中

重写向正确+错误输出

变量——使用不变的字符串,保存变化的数据

    编写时,把变化的数据用变量表示

变量的使用规则

    变量名相同时,后赋值有效

    变量名区分字母大小写

    变量名命名时可以使用数字、字母、下划线,但不允许以数字开头

    变量赋值是=两边不允许有空格

    不指定变量类型时    默认都是字符类型

定义变量        变量名1=值

使用变量        $变量名1

输出变量的值        echo    $变量名1

删除变量        unset     $变量名1

查看已定义的变量    set |grep     变量名1

[root@localhost mnt]# a=this

[root@localhost mnt]# b=test

[root@localhost mnt]# echo $ais$b

test

[root@localhost mnt]# echo $a$b

thistest

[root@localhost mnt]# echo ${a}is$b

thisistest

[root@localhost mnt]# echo $a is $b

this is test

区别""和''

    ""变量的值会被值所取代

    ''不解释变量值——直接输出

[root@localhost mnt]# echo "$a-is-$b"

this-is-test

[root@localhost mnt]# echo '$a-is-$b'

$a-is-$b

系统命令的执行结果给变量赋值

[root@localhost mnt]# date ``

Wed Aug 24 22:48:25 CST 2016

[root@localhost mnt]# date +%d

24

[root@localhost mnt]# a=`date +%d`

[root@localhost mnt]# b=$(date +%d)

[root@localhost mnt]# echo $a $b

24 24

执行脚本时接收用户从键盘输入的数据——read    函数

结果

系统环境变量——系统启动时或系统服务启动时

    加载配置文件定义 变量

    系统环境变量名,通常都是大写字母定义

    变量名和存储的值都是固定的

    编写脚本时可以直接调用系统环境变量——通常不修改系统环境变量的值

$PATH——保存系统命令对就文件所在的目录

$USER——当前系统登录的用户

$PWD——当前的路径

$HOSTNAME——当前的主机名

  全局变量:在当前shell和当前相有的子shell里使用 

    可以使用export  变量名=值————————export  -n  变量名——————则取消变量

    开机自动识别变量  export  变名=值写入到/etc/profile

  局部变量:只能在当前shell下使用

  终端变量周期

  终端下定义变量只要不手动撤销、关闭终端,定义的变量就一直有效

  脚本里定义变量,只在脚本执行过程中有效

预定义变量——/bin/bash——默认

  变量名和值都是固定的,变量的值不可以修改,变量的值是根据当前运行环境赋值

  在写脚本时可直接调用预定义变量

$0——保存当前终端的进程或当前运行脚本的脚本名

$?——上一条命令执行结果的返回状态

  非0:错误

  为0:正确

$$  进程的PID号

$!——当前终端后台运行进程的PID号

[root@localhost ~]# find / -name "test" &
[1] 6608

[root@localhost ~]# echo $!
6608

位置变量——保存脚本或函数 对应位置变量的值

  $1保存脚本或函数 第一个位置参数的值

  $2保存脚本或函数 第二个位置参数的值

  ...

  $9保存脚本或函数 第九个位置参数的值

  ${10}保存脚本或函数 第十个位置参数的值

  ......

$# ——保存脚本或 函数,位置变量 的总个数

$*——保存脚本或 函数,所有 位置变量 的值

自定义变量——根据脚本的需要定义的变量是自定义变量,遵揗变量的使用规则

可以man bash——/bin/bash帮助手册

命令行下的特殊符号

通配符——* ? {} []

 

&&

命令1 && 命令2

命令1执行成功,命令2才会执行

若命令1执行失败,命令2不会去执行

||

命令1 || 命令2

命令1执行失败,命令2才会执行

若命令1执行成功,命令2不会去执行

 

命令1 ; 命令2

先执行命令1,在执行命令2——————命令执行成功或失败,不影响后面命令的执行

编写脚本思路

  明确脚本功能

  实现功能时,会用到哪些系统命令

  把变化的数据用变量表示

  把脚本中反复执行的操作,使用流程控制实现

实验

原文地址:https://www.cnblogs.com/fina/p/5805016.html