shell学习一

 

目录

1. shell的作用和历史

2. shell的常用功能 

3. shell变量种类

3. shell脚本的运行

4. 编写简单的shell脚本

 

Shell的作用及常见种类

Shell的作用 -- 命令解释器,“翻译官”

 

Bash的常用功能

Tab键自动补齐

命令历史

命令别名

标准输入输出

重定向操作

管道操作

 

Bash的命令历史

命令历史

保存用户曾经执行过的命令操作

存放位置:~/.bash_history 文件 

查看历史命令 

使用↑、↓按键逐条翻看,允许编辑并重复执行

执行:history

清除历史命令

执行:history -c 

 

Bash的命令历史

调用历史命令

!n:执行历史记录中的第n条命令

!str:执行历史记录中以“str”开头的命令

设置记录历史命令的条数

修改 HISTSIZE 参数(默认为1000条) 

Vi /etc/profile    设置:HISTSIZE=200

 

Bash的命令别名

命令别名

为使用频率较高的复杂命令行设置简短的调用名称

存放位置:~/.bashrc 

 

Bash的标准输入输出

交互式硬件设备

标准输入:从该设备接收用户输入的数据

标准输出:通过该设备向用户输出数据

标准错误:通过该设备报告执行出错信息

 

类型设备文件文件描述编号默认设备

标准输入/dev/stdin0键盘

标准输出/dev/stdout1显示器

标准错误输出/dev/stderr2显示器

Bash的重定向操作

改变标准输入、标准输出、标准错误的方向

类型操作符用途

重定向标准输入<将命令中接收输入的途径由默认的键盘更改为指定的文件 

重定向标准输出>将命令的执行结果输出到指定的文件中,而不是直接显示在屏幕上 

>>将命令执行的结果追加输出到指定文件 

重定向标准错误2>清空指定文件的内容,并将标准错误信息保存到该文件中

2>>将标准错误信息追加输出到指定的文件中

重定向标准输出和

标准错误&>将标准输出、标准错误的内容全部保存到指定的文件中,而不是直接显示在屏幕上

Bash的管道操作

管道操作符号“|” 

[root@localhost ~]# free –m | head -2

[root@localhost ~]# free –m | grep “Mem” | awk ‘{print $2,$4}’

 

Shell变量的应用

Shell变量

为灵活管理Linux系统提供特定参数,有两层意思:

1.变量名:使用固定的名称,由系统预设或用户定义

2. 变量值:能够根据用户设置、系统环境变化而变化

Shell变量的种类

用户自定义变量:由用户自己定义、修改和使用

环境变量:由系统维护,用于设置用户的Shell工作环境,只有极少数的变量用户可以修改

预定义变量:Bash预定义的特殊变量,不能直接修改

位置变量:通过命令行给程序传递执行参数

 

变量的赋值与引用

定义新的变量

变量名要以英文字母或下划线开头,区分大小写

格式:变量名=变量值

查看变量的值

格式:echo  $变量名

[root@localhost ~]# DAY=Sunday

[root@localhost ~]# echo $DAY

 

从键盘输入内容为变量赋值

 格式: read  [-p  "信息"]  变量名

结合不同的引号为变量赋值

双引号 “ ” :允许通过$符号引用其他变量值

单引号 ‘ ’ :禁止引用其他变量值,$视为普通字符

反撇号 ` ` :将命令执行的结果输出给变量

 

设置变量的作用范围

格式:export   变量名...

                export  变量名=变量值  [...变量名n=变量值n]

清除用户定义的变量

格式:unset   变量名

 

变量赋值、引用和删除

[root@localhost ~]# echo $FILESVR

filesvr.lamp.com

[root@localhost ~]# export FILESVR

[root@localhost ~]# zsh 

[root@localhost]~# echo $FILESVR

filesvr.lamp.com

[root@localhost]~# exit

[root@localhost root]# unset  FILESVR

[root@localhost root]# echo $FILESVR

 

数值变量的运算

计算整数表达式的运算结果

格式:expr  变量1   运算符  变量2  ...[运算符 变量n]

expr的常用运算符

加法运算:+ 

减法运算: - 

乘法运算: \*

除法运算: / 

求模(取余)运算: % 

 

环境变量

1.环境变量配置文件

全局配置文件:/etc/profile 

用户配置文件:~/.bash_profile 

2.查看环境变量 

set命令可以查看所有的Shell变量,其中包括环境变量

 

环境变量

常见的环境变量:

 $USER 、$LOGNAME

 $UID 、 $SHELL 、$HOME

 $PWD、 $PATH 

 $PS1、$PS2

 

查看环境变量

[root@localhost ~]# echo $PATH

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@localhost ~]# PATH="/opt/bin:$PATH"

[root@localhost ~]# echo $PATH

/opt/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

 

位置变量

表示为 $n,n为1~9之间的数字

[root@localhost ~]# ./exam01 one two three four 

$0:当前执行的进程/程序名 exam01

$1 表示one

$2 表示 two

依次类推

 

查看当前所执行进程的名称、PID号

[root@localhost ~]#echo $0 $$

bash 5887

[root@localhost ~]#echo $?

127

返回0表示上一条命令正常,返回非0表示上一条命令异常

 

Shell脚本的概念

Shell脚本

1.用途:完成特定的、较复杂的系统管理任务

2.格式:集中保存多条Linux命令,普通文本文件

3.执行方式:按照预设的顺序依次解释执行

 

编写可执行的Shell脚本

建立包含执行语句的脚本文件 

#脚本文件中包括的内容 

 运行环境设置:#!/bin/bash 

 注释信息:以#开始的说明性文字 

 可执行的Linux命令行

为脚本文件添加可执行权限

 

给shell脚本增加执行权限

[root@localhost ~]# vi repboot.sh

#!/bin/bash

# To show usage of /boot directory and mode of kernel file.

echo "Useage of /boot: "

du -sh /boot

echo "The mode of kernel file:"

ls -lh /boot/vmlinuz-*

[root@localhost ~]# chmod a+x repboot.sh 

 

运行Shell脚本程序

1.直接执行具有“x”权限的脚本文件

 例如:./repboot.sh 

2.使用指定的解释器程序执行脚本内容

 例如:bash  repboot.sh、sh  repboot.sh

3.通过source命令(或 . )读取脚本内容执行

 例如:souce  repboot.sh  或  .   hello.sh 

 

Shell脚本应用示例

示例一

[root@localhost ~]# vi /opt/ftpclean.sh

#!/bin/bash

date  >>  /var/log/pubdir.log

ls  -lhR  /var/ftp/pub  >>  /var/log/pubdir.log

rm  -rf  /var/ftp/pub/*

 

示例二

[root@localhost ~]# vi /opt/dbbak.sh 

#!/bin/bash

DAY=`date +%Y%m%d`

SIZE=`du -sh /var/lib/mysql`

echo "Date: $DAY" >> /tmp/dbinfo.txt

echo "Data Size: $SIZE" >> /tmp/dbinfo.txt

cd /opt/dbbak

tar zcvf mysqlbak-${DAY}.tar.gz /var/lib/mysql /tmp/dbinfo.txt

rm -f /tmp/dbinfo.txt 

 

小结:

1.shell的作用

2.常用的shell类型

3.熟练shell的常用功能

4.shell变量的种类

5.shell脚本的运行条件

 

练习:

1.对shell常用功能的操作

2.练习shell的各种变量的定义、查看和使用

3.写一个简单的多条命令的shell脚本

4.如何去运行以上的那个shell脚本

5.开机如何自动执行这个shell脚本

 

练习一参考:

查询命令相关

1 查询data.f文件中字符串”abc”出现的行号以及内容

grep –n ‘abc’ data.f 

2 查询data.f文件中字符串”abc”出现的行的内容

grep ‘abc’ data.f

3 查询data.f文件中字符串”abc”出现的行数

grep –n ‘abc’ data.f | cut –f 1 –d  ‘:’

4 查询data.f文件中不包含字符串”abc”出现的行号以及内容

grep –vn ‘abc’ data.f

5 使用正则表达式写出与 grep –i “sept” data.f 作用相同的代码

grep ‘[sS][eE][pP][tT]‘ data.f

6 正则表达式 grep ‘48[34]’ data.f 的含义

匹配’483’ or ‘484’

7 正则表达式grep ‘^[^48]’ data.f的含义

匹配不是以4或者8开头的行

8 正则表达式grep ‘K…D’ data.f的含义

.代表任意字符,也就是匹配K ____D

9 正则表达式grep '[0-9][0-5][0-6]' data.f的含义,与grep '^[0-9][0-5][0-6]' data.f的区别?

    第一个:匹配3个连续的数字,第一位是0-9,第二位是0-5,第三位是0-6。

第二个:匹配的3个数字必须在行首

 

10 查询文件中空行的正则表达式

   grep '^\s*$' data

11 正则表达式 grep "0:0" /etc/passwd | egrep -v '^root'的真正意图

查找UID和GID都为0的非root用户。

开机自动执行shell脚本

source test.sh 将此命令添加到/etc/rc.local即可

 

你可能感兴趣的:(linux,shell)