没有合适的资源?快使用搜索试试~ 我知道了~
首页Shell脚本编程入门与实践全解析
Shell脚本编程入门与实践全解析
需积分: 5 0 下载量 93 浏览量
更新于2024-07-09
收藏 4.24MB PDF 举报
"《6 SHELL脚本编程.pdf》是一份全面深入的教程,专注于Shell脚本编程的方方面面。该文档首先介绍了编程的基础概念,包括程序的组成、编程风格、编程语言的选择以及逻辑处理方式。学习者将了解到Shell脚本的主要用途,如自动化任务、系统管理等,并掌握脚本的基本结构、创建过程和注释规范。 章节2详细讲解了Shell脚本语言的实践应用,涵盖了变量的使用,包括不同类型的变量(如环境变量、只读变量、位置变量和退出状态码变量)、变量命名规则,以及如何定义、引用和操作变量。此外,还涉及到了格式化输出的printf命令、算术运算和逻辑运算,以及条件测试命令的各种应用场景。 第3部分着重于bash的配置文件,按照不同的生效范围、登录方式和功能进行分类,如Profile类和Bashrc类,以及如何编辑配置文件并使其生效。文档还讨论了Bash的退出任务管理。 流程控制是核心内容,包括条件选择(单分支和多分支if语句,case语句)、循环结构(for、while、until循环及其控制语句),以及函数的使用和管理,如定义、调用、返回值、参数和递归。另外,还介绍了信号捕捉trap和创建临时文件mktemp等实用工具。 这份指南不仅适合初学者系统地学习Shell脚本,也对有一定经验的开发者提供了深入理解Shell编程特性和优化实践的参考。通过阅读和实践这些内容,读者可以掌握Shell脚本的强大功能,提升系统管理和自动化任务的能力。"
资源详情
资源推荐
变量引用:
显示所有环境变量:
删除变量:
bash内建的环境变量
2.7.7 只读变量
只读变量:只能声明定义,但后续不能修改和删除,即常量
声明只读变量:
查看只读变量:
#声明并赋值
export name=VALUE
declare -x name=VALUE
#或者分两步实现
name=VALUE
export name
$name
${name}
env
printenv
export
declare -x
unset name
PATH
SHELL
USER
UID
HOME
PWD
SHLVL #shell的嵌套层数,即深度
LANG
MAIL
HOSTNAME
HISTSIZE
_ #下划线 表示前一命令的最后一个参数
readonly name
declare -r name
readonly [-p]
declare -r
范例:
2.7.8 位置变量
位置变量:在bash shell中内置的变量, 在脚本代码中调用通过命令行传递给脚本的参数
清空所有位置变量
范例:
[root@centos8 ~]#readonly PI=3.14159
[root@centos8 ~]#echo $PI
3.14159
[root@centos8 ~]#PI=3.14
-bash: PI: readonly variable
[root@centos8 ~]#unset PI
-bash: unset: PI: cannot unset: readonly variable
[root@centos8 ~]#echo $PI
3.14159
[root@centos8 ~]#exit
logout
Connection closed by foreign host.
Disconnected from remote host(10.0.0.8) at 14:27:04.
Type `help' to learn how to use Xshell prompt.
[c:\~]$
Reconnecting in 1 seconds. Press any key to exit local shell.
.
Connecting to 10.0.0.8:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Wed Apr 1 13:51:28 2020 from 10.0.0.1
[root@centos8 ~]#echo $PI
[root@centos8 ~]#
$1, $2, ... 对应第1个、第2个等参数,shift [n]换位置
$0 命令本身,包括路径
$* 传递给脚本的所有参数,全部参数合为一个字符串
$@ 传递给脚本的所有参数,每个参数为独立字符串
$# 传递给脚本的参数的个数
注意:$@ $* 只在被双引号包起来的时候才会有差异
set --
[root@centos8 ~]#cat /data/scripts/arg.sh
#!/bin/bash
#
#********************************************************************
范例:删库跑路之命令rm的安全实现
#Author: wangxiaochun
#QQ: 29308620
#Date: 2020-04-01
#FileName: arg.sh
#URL: http://www.magedu.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
echo "1st arg is $1"
echo "2st arg is $2"
echo "3st arg is $3"
echo "10st arg is ${10}"
echo "11st arg is ${11}"
echo "The number of arg is $#"
echo "All args are $*"
echo "All args are $@"
echo "The scriptname is `basename $0`"
[root@centos8 ~]#bash /data/scripts/arg.sh {a..z}
1st arg is a
2st arg is b
3st arg is c
10st arg is j
11st arg is k
The number of arg is 26
All args are a b c d e f g h i j k l m n o p q r s t u v w x y z
All args are a b c d e f g h i j k l m n o p q r s t u v w x y z
The scriptname is arg.sh
[root@centos8 ~]#cat /data/scripts/rm.sh
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#Date: 2020-04-01
#FileName: /data/scripts/rm.sh
#URL: http://www.magedu.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
WARNING_COLOR="echo -e \E[1;31m"
END="\E[0m"
DIR=/tmp/`date +%F_%H-%M-%S`
mkdir $DIR
mv $* $DIR
${WARNING_COLOR}Move $* to $DIR $END
[root@centos8 ~]#chmod a+x /data/scripts/rm.sh
[root@centos8 ~]#alias rm='/data/scripts/rm.sh'
[root@centos8 ~]#touch {1..10}.txt
[root@centos8 ~]#rm *.txt
范例:$*和$@的区别
范例: 利用软链接实现同一个脚本不同功能
2.7.9 退出状态码变量
当我们浏览网页时,有时会看到下图所显示的数字,表示网页的错误信息,我们称为状态码,在shell脚
本中也有相似的技术表示程序执行的相应状态。
Move 10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt to /tmp/2020-
04-01_15-15-28
[root@centos8 scripts]#cat f1.sh
#!/bin/bash
echo "f1.sh:all args are $@"
echo "f1.sh:all args are $*"
./file.sh "$*"
[root@centos8 scripts]#cat f2.sh
#!/bin/bash
echo "f2.sh:all args are $@"
echo "f2.sh:all args are $*"
./file.sh "$@"
[root@centos8 scripts]#cat file.sh
#!/bin/bash
echo "file.sh:1st arg is $1"
[root@centos8 scripts]#./f1.sh a b c
f1.sh:all args are a b c
f1.sh:all args are a b c
file.sh:1st arg is a b c
[root@centos8 scripts]#./f2.sh a b c
f2.sh:all args are a b c
f2.sh:all args are a b c
file.sh:1st arg is a
[root@centos8 ~]#cat test.sh
#!/bin/bash
#********************************************************************
echo $0
[root@centos8 ~]#ln -s test.sh a.sh
[root@centos8 ~]#ln -s test.sh b.sh
[root@centos8 ~]#./a.sh
./a.sh
[root@centos8 ~]#./b.sh
./b.sh
进程执行后,将使用变量 $? 保存状态码的相关数字,不同的值反应成功或失败,$? 取值范例 0-255
范例:
范例:
用户可以在脚本中使用以下命令自定义退出状态码
注意:
脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码
2.7.10 展开命令行
展开命令执行顺序
防止扩展
范例:
$?的值为0 #代表成功
$?的值是1到255 #代表失败
ping -c1 -W1 hostdown &> /dev/null
echo $?
[root@centos8 scripts]#curl http://www.wangxiaochun.com &> /dev/null
[root@centos8 scripts]#echo $?
0
exit [n]
把命令行分成单个命令词
展开别名
展开大括号的声明{}
展开波浪符声明 ~
命令替换$() 和 ``
再次把命令行分成命令词
展开文件通配*、?、[abc]等等
准备I/0重导向 <、>
运行命令
反斜线(\)会使随后的字符按原意解释
剩余98页未读,继续阅读
「已注销」
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功