shell总结大全(干货)

金属质感分割线

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

vim /etc/shells

  1. Tab键自动补齐

2.Bash的命令历史

命令历史

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

存放位置:~/.bash_history 文件

查看历史命令

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

执行:history

清除历史命令

执行:history -c

3.调用历史命令

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

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

设置记录历史命令的条数

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

4.命令别名

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

存放位置:~/.bashrc

查看命令别名

格式:alias [别名]

设置命令别名

执行:alias 别名=’实际执行的命令’

取消已设置的命令别名

格式:unalias 别名

5.Bash的标准输入输出

交互式硬件设备

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

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

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

6.Bash的重定向操作

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

7.Bash的管道操作

管道操作符号“|”

连接左右两个命令,将左侧的命令输出的结果,作为右侧命令的输入(处理对象)

格式:cmd1 | cmd2 [… | cmdn]

1.Shell变量含义

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

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

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

2.Shell变量的种类

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

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

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

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

3.变量的赋值与引用

✦定义新的变量

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

格式:变量名=变量值

✦查看变量的值

格式:echo $变量名

查看所有变量:set

✦清除变量

unset 变量名

[root@localhost ~]# DAY=Sunday

[root@localhost ~]# echo $DAY

Sunday

在查看变量时,如果变量名容易和后边的字符串连在一起导致混淆,则应该使用大括号将变量名括起来,使用形式为:${变量名} ,例如:

若已知变量Var的值为lamp,则执行“echo Var3.0.0lamp3.0Var3lamp3.0echo V a r 3.0 ” 命 令 后 将 显 示 结 果 “ .0 ” 而 不 是 “ l a m p 3.0 ” , 因 为 在 该 命 令 中 , 会 将 “ V a r 3 ” 当 成 变 量 名 ( 默 认 未 定 义 此 变 量 ) 。 若 希 望 正 确 显 示 “ l a m p 3.0 ” 的 输 出 结 果 , 则 需 要 执 行 “ e c h o {Var}3.0”

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

格式: read [-p “信息”] 变量名

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

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

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

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

4.数值变量的运算

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

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

expr的常用运算符

加法运算:+

减法运算: -

乘法运算: *

除法运算: /

求模(取余)运算: %

Bash程序并不适合进行强大的数学运算,例如小数或指数运算的,一般只能进行简单的整数运算

对Shell变量进行数值运算时,更多的时候是用于脚本程序的过程控制,如控制程序的循环次数

在expr命令的使用格式中,变量与运算符间是有空格的,可以同时使用多个运算符、多个变量

由于星号“*”作为Bash环境中的通配符使用,因此乘法运算符需要使用“*”的特殊形式(转义字符)

!/bin/bash

read -p “please input num1:” -t 30 test1

read -p “input num2:” -t 30 test2

declare -i sum=” test1+ t e s t 1 + test2”

echo “num1 + num2 = $sum”

5.环境变量赋值

设置变量的作用范围

格式:export 变量名…

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

查看环境变量

 env    或   export

清除用户定义的变量

格式:unset 变量名

对于用户自行定义的变量,默认只能在当前的Shell环境中使用,因此称为局部变量

局部变量在新开启的子Shell环境中是无效的(无法引用定义的变量) ,因此需要使用export命令将变量输出为全局变量

只有对于全局变量,在当前Shell的子Shell环境(例如zsh)中,才能够被正确引用

变量不存在或者值为空时,通过echo命令查看时将显示一个空行

6.系统环境变量

环境变量配置文件

全局配置文件:/etc/profile

           /etc/bashrc

用户配置文件:~/.bash_profile

              ~/.bashrc

有完整登陆流程时,加载环境变量顺序

先读/etc/profile

再读~/.bash_profile

再读~/.bashrc

再读/etc/bashrc

开始Bash界面

用set查看环境变量

[root@localhost root]# set

SHELL=/bin/bash

TERM=xterm

UID=0

USER=root

consoletype=pty

环境变量

✦常见的环境变量

USER U S E R 、 LOGNAME

UID U I D 、 SHELL 、$HOME

PWD P W D 、 PATH

PS1 P S 1 、 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

✦命令执行时查找顺序

1、以相对/绝对路径执行

2、由alias找到的执行

3、bash内部命令执行

4、按$PATH路径执行

✦环境变量PS1

echo $PS1

    \d  日期  \t  时间(24)  \T时间(12)

    \H  完整主机名       \h  简写主机名

    \u  用户名         \v  bash版本

    \w  完整目录        \W  最后一个目录

    \#   执行了第几个命令   \$  提示符

PS1=‘[\u@\h \W \t ##]$’

位置变量

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

$0为第0个参数,脚本本身

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

预定义变量

✦表示形式如下

$#:命令行中位置参数的个数

$*:所有位置参数的内容

$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错

$$:当前所在进程的进程号

$!:后台运行的最后一个进程号

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

[root@localhost ~]# bash

[root@localhost ~]# echo 0 0 $

bash 5887

[root@localhost ~]# exxit

bash: exxit: command not found

[root@localhost ~]# echo $?

127

[root@localhost ~]# exit

exit

[root@localhost ~]# echo $?

0

✦输出位置参数变量,脚本后要接参数

!/bin/bash

echo “the command is $0”

echo “canshu1 is $1”

echo “canshu2 is $2”

✦输出预定义变量

!/bin/bash

echo “canshu zongshu $#”

echo “canshu libiao: $*”

echo $?

✦多命令运行

; 命令顺序执行。

&& 前后命令的执行存在逻辑与关系,只有&&前面的命令执行成功后,它后面的命令才被执行。

|| 前后命令的执行存在逻辑或关系,只有||前面的命令执行失败后,它后面的命令才被执行。

通配符与特殊符号

✦通配符

    *   任意多个

    ?   任意一个

    []  括号内任一个  [^0-9]非数字

✦特殊符号

    \   转义符

    &   后台

    !   非

Shell脚本

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

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

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

编写可执行的Shell脚本

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

脚本文件中包括的内容

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

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

可执行的Linux命令行

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

在脚本文件的各组成部分中,只有可执行语句是必不可少的(否则就不叫程序了)

当缺省运行环境设置时,会自动由当前加载该脚本的Shell解释器负责解释执行

Shell脚本文件的扩展名并无严格的约束,不一定非得是“.sh”结尾的

给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

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

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

脚本程序可以通过多种方式运行:

为脚本文件设置了可执行属性后,在Shell命令行中可以直接通过脚本文件的路径执行脚本程序

在调试阶段可以使用Shell程序直接调用脚本文件,不要求脚本具有可执行权限,格式是:bash 脚本名

使用Bash的内部命令“.”脚本文件执行时,将不会开启新的Shell环境。使用这种方式时,脚本文件作为“.”命令的参数,因此同样不要求具备可执行权限。

示例1:

每周五17:30清理FTP服务器的公共共享目录

检查 /var/ftp/pub/ 目录,将其中所有子目录及文件的详细列表、当时的时间信息追加保存到 /var/log/pubdir.log 日志文件中,然后清空该目录

[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 ~]# crontab -e

30 17 * * 5 /opt/ftpclean.sh

Shell脚本应用示例

示例2:

每隔3天对数据库目录做一次完整备份

统计 /usr/local/mysql/var 目录占用的空间大小、查看当前的日期,并记录到临时文件 /tmp/dbinfo.txt 中

将 /tmp/dbinfo.txt 文件、/usr/local/mysql/var 目录进行压缩归档,备份到/opt/dbbak/目录中

备份后的包文件名中要包含当天的日期信息

最后删除临时文件/tmp/dbinfo.txt

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

!/bin/bash

DAY=date +%Y%m%d

SIZE=du -sh /usr/local/mysql/var

echo “Date: $DAY” >> /tmp/dbinfo.txt

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

mkdir /opt/dbbak

cd /opt/dbbak

tar -zcPf mysqlbak-${DAY}.tar.gz /usr/local/mysql/var /tmp/dbinfo.txt

rm -f /tmp/dbinfo.txt

[root@localhost ~]# crontab -e

55 23 /3 * /opt/dbbak.sh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值