临沂网站建设哪家更好/软文素材库
目录
- 1. 什么是shell脚本
- 1.1 简单shell脚本练习
- 1.1.0 交互式脚本:变量内容由用户决定
- 1.1.1 随日期变换:利用 date 建立文件
- 1.1.2 数值运算:简单的加减乘除
- 1.1.3 数值运算:通过bc计算Pi(圆周率)
- 1.2 脚本的执行方式差异(source、sh script、./script)
- 1.2.0 利用直接执行的方式来执行脚本
- 1.2.1 利用 source 来执行脚本:在父进程中执行
1. 什么是shell脚本
shell脚本是利用 shell 的功能所写的一个程序。这个程序是使用纯文本文件,将一些 shell 的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能
shell 脚本编写的注意事项:
- 命令是从上而下,从左到右地分析执行
- 命令、选项与参数间的多个空格都会被忽略
- 空白行也被忽略,且[Tab]按键所产生的空白同样视为空格键
- 如果读取到一个Enter符号(CR),就尝试开始执行该行(或该串)命令
- 如果一行内容太多,可使用【[Enter]】扩展到下一行
假设写的程序文件名【/home/dmtsai/shell.sh】那该如何执行此文件?
- 直接命令执行:shell.sh文件必须具备 rx权限
- 绝对路径:使用【/home/dmtsai/shell.sh】
- 相对路径:以及进入【/home/dmtsai】目录,则使用【./shell.sh】来执行
- 变量【PATH】功能:将shell.sh放在PATH指定的目录内,例如【~/bin/】
- 以bash程序来执行:通过【bash shell.sh】或【sh shell.sh】来执行
编写第一个脚本
[dmtsai@study ~] mkdir bin; cd bin
[dmtsai@study bin] vim hello.sh
声明此脚本使用的 shell 名称
程序内容的说明
- 内容与功能
- 版本信息
- 作者与联系方式
- 建立文件日期
- 历史记录
主要环境变量的声明
主要程序部分
执行结果告知(定义返回值)
利用【exit】命令来让程序中断,并且返回一个数值给系统
这里的【exit 0】代表退出脚本并且返回一个0给系统
运行该脚本
[dmtsai@study bin] sh hello.sh
或者
[dmtsai@study bin] chmod a+x hello.sh;./hello.sh
# a代表三种身份都有(user、group、others)
shell 脚本的良好编写习惯
在每个脚本的文件头部记录
- 脚本的功能
- 脚本的版本信息
- 脚本的作者与联络方式
- 脚本的版权声明方式
- 脚本的历史记录(history)
- 脚本内较特殊的命令,使用【绝对路径】的方式来执行
- 脚本运行时需要的环境变量预先声明与设置
1.1 简单shell脚本练习
1.1.0 交互式脚本:变量内容由用户决定
范例:
让用户输入
1.first name
2.last name
最后在屏幕上显示
运行该脚本
[dmtsai@study bin] sh showname.sh
运行结果
前两行的行末冒号后的内容是由用户输入
1.1.1 随日期变换:利用 date 建立文件
范例:
要建立三个空文件(touch)文件名最开头由用户输入决定,假设用户输入filename,今天的日期是2021/02/23,要以前天、昨天、今天的日期来建立这些文件,即filename_20210221、filename_20210222、filename_20210223
[dmtsai@study bin] vim create_3_filename.sh
【$(command)】将命令行的输出作为参数输入
运行脚本:
[dmtsai@study bin] sh create_3_filename.sh
1.1.2 数值运算:简单的加减乘除
declare定义变量类型,当变量定义为整数后才能够进行加减运算
【$((计算式))】进行数值运算
bash shell里默认仅支持整数的数据
范例:
要用户输入两个变量,然后将两个变量的内容相乘,最后输出相乘的结果
[dmtsai@study bin] vim multiplying.sh
运行脚本
[dmtsai@study bin] sh multiplying.sh
数值运算上可以使用如下:
declare -i total=${firstnu}*${secnu}
或
var=$((运算内容)) #建议使用此种方式
范例:
[dmtsai@study bin] echo $(( 13 % 3 ))
1
计算含有小数点的数据,可用【bc】命令协助
[dmtsai@study bin] echo "123.123*55.9" | bc
6882.575
1.1.3 数值运算:通过bc计算Pi(圆周率)
[dmtsai@study bin] vim cal_pi.sh
运行脚本
[dmtsai@study bin] sh cal_pi.sh
1.2 脚本的执行方式差异(source、sh script、./script)
1.2.0 利用直接执行的方式来执行脚本
直接执行的方式,其脚本是在子进程的 bash 内执行的
【当子进程完成后,在子进程内的各项变量或操作将会结束而不会传回到父进程中】
[dmtsai@study bin] echo ${firstnu} ${lastname} #父进程的bash中#显示这两个变量并不存在
[dmtsai@study bin] sh showname.sh
直接执行脚本的话,脚本会进入子进程bash
脚本结束后,子进程bash内的所有数据被删除
再次查看父进程中的【firstname】和【lastname】是否存在
[dmtsai@study bin] echo ${firstname} ${lastname} #父进程bash中#显示这两个变量并不存在
当子进程完成后,在子进程内的各项变量或操作将会结束而不会传回到父进程中
1.2.1 利用 source 来执行脚本:在父进程中执行
用source执行脚本
[dmtsai@study bin] source showname.sh
[dmtsai@study bin] echo ${firstname} ${lastname} #父进程bash中