千锋教育-做有情怀、有良心、有品质的IT职业教育机构

400-811-9990
当前位置:千锋视频教程 >  python视频教程  >  Python教程之shell编程的命令及介绍

Python教程之shell编程的命令及介绍

时间:2018-06-11 11:56     来源:千锋视频教程 作者:千锋老师

一.Shell的作用及常见种类

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

1

vim /etc/shells

二.Bash的常用功能

1. Tab键自动补齐

2.Bash的命令历史

命令历史

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

存放位置:~/.bash_history 文件

查看历史命令

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

执行:history

清除历史命令

执行:history -c

3.调用历史命令

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

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

设置记录历史命令的条数

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

4.命令别名

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

存放位置:~/.bashrc

查看命令别名

格式:alias [别名]

设置命令别名

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

取消已设置的命令别名

格式:unalias 别名

5.Bash的标准输入输出

交互式硬件设备

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

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

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

2

6.Bash的重定向操作

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

3

7.Bash的管道操作

管道操作符号“|”

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

格式:cmd1 | cmd2 [... | cmdn]

三.Shell变量的应用

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”命令后将显示结果“.0”而不是“lamp3.0”,因为在该命令中,会将“Var3”当成变量名(默认未定义此变量)。若希望正确显示“lamp3.0”的输出结果,则需要执行“echo ${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+$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 、$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

命令执行时查找顺序

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 $

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脚本的概念

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环境。使用这种方式时,脚本文件作为“.”命令的参数,因此同样不要求具备可执行权限。

五.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

千锋Python培训课程还有严格、科学、负责的教学就业管理制度,班主任、职业规划师全程跟班,把握每位学员的学习状态,并有专业的职业素养课和就业指导课,确保教学及就业质量。还有大量的免费Python视频教程帮助学员快速学习,更可以免费加入千锋开发者联盟,为会员提供免费技术支持及终身就业服务,免费参加千锋举办的各类技术沙龙和活动!

  • 北京天丰利校区(总部)地址:北京市海淀区宝盛北里西区28号天丰利商城4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术学院广场服务楼2、3层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 深圳西部硅谷校区地址:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619
    深圳大学城校区地址:深圳市南山区留仙大道1201号大学城创客小镇16栋3楼
    咨询电话: 0755-23015275/23015546-801(硅谷) 0755-86660670-801(大学城)
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 上海校区地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-811-9990 021-65233829-609
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 郑州校区地址:郑州市二七区航海中路60号海为科技园C区10层、12层
    咨询电话:0371-55191750
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 广州校区地址:广州市天河区元岗路200号慧通产业园B9三层
    咨询电话:020-38035223 020-38035220
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 大连校区地址:辽宁省大连市高新园区爱贤街10号大连设计城A座901
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 武汉金融港校区地址:武汉市东湖高新技术开发区光谷大道77号金融港B18栋3楼
    武汉智慧园校区地址:武汉市东湖高新技术开发区光谷大道61号智慧园21栋2楼
    咨询电话:027-59313371
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、360网络安全、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训
  • 成都校区地址:成都市武侯区科华北路62号力宝大厦N(北楼)18楼
    咨询电话:400-811-9990 028-83178771
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 西安校区地址:西安市雁塔区高新六路52号立人科技C座西区4楼
    咨询电话:029-85363390
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 杭州旺田校区:浙江省杭州市江干区九堡旺田书画城A座4层
    杭州龙驰校区:浙江省杭州市下沙经济技术开发区元成路199号龙驰智慧谷B座7层
    咨询电话:400-811-9990 0571-86893632/0571-86094032
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 青岛校区地址:青岛市市北区龙城路卓越世纪中心3号楼8层801
    咨询电话:0532-80911190
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 重庆校区地址:重庆市高新区科园一路2号大西洋国际12-1
    咨询电话:400-811-9990 023-68883009
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 长沙校区地址:湖南省长沙市岳麓区麓谷企业广场A2栋三单元306号
    咨询电话:0731-85513210
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 哈尔滨校区地址:哈尔滨市松北区创新一路699号 科技创新城19号楼B座五楼
    咨询电话:400-811-9990/0451-87173191
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 南京校区地址:南京市建邺区应天大街780号应天智汇产业园弘辉园1幢2楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 千锋教育服务号

    了解千锋动态
    关注千锋教育服务号

  • 千锋教育移动站

    扫一扫快速进入
    千锋移动端页面

  • 千锋互联服务号

    扫码匿名提建议
    直达CEO信箱