一.shell的作用和历史
二.shell的常用功能
三.shell变量种类
四.shell脚本的运行
五.编写简单的shell脚本
一.Shell的作用及常见种类
Shell的作用 — 命令解释器,翻译官
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的标准输入输出
交互式硬件设备
标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告执行出错信息
6.Bash的重定向操作
改变标准输入、标准输出、标准错误的方向
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学习资料,欢迎点击进群向群主索要。←戳我
声明:本文部分素材转载自互联网,如有侵权立即删除 。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容