第10章:构建基本的脚本_《shell脚本大全 第二版》

一、执行

1、并行执行命令,多个命令用分号隔开

[[email protected] network-scripts]# date;who
Tue May  3 14:55:44 CST 2016
root     tty1         2016-05-03 01:40
root     pts/0        2016-05-03 13:41 (192.168.78.1)

2、Shell脚本的第一行表示需要bash去执行

#! /bin/bash

3、Shell脚本按照顺序执行

4、单点操作符代表将要执行shell脚本

[[email protected] network-scripts]# ./test.sh
二、显示信息

5、在脚本中运用echo输出信息

[[email protected] network-scripts]# echo "Hello World"
Hello World

6、echo -n 表示输出信息在同一行,-n 表示忽略换行符

[[email protected] network-scripts]# echo -n "Hello World "
Hello World [[email protected] network-scripts]#
三、使用变量

7、环境变量(也称为系统变量,对应到用户自定义的称为用户变量)

[[email protected] network-scripts]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
.....

8、引用变量,在变量名前加$符号或者${变量名}的方式

[[email protected] network-scripts]# echo $USER
root
[[email protected] network-scripts]# echo ${USER}
root

9、用户变量区分大小写

[[email protected] network-scripts]# Val="Val"
[[email protected] network-scripts]# val="val"
[[email protected] network-scripts]# echo $val
val
[[email protected] network-scripts]# echo $Val
Val

10、赋值变量时,“=” 号左右不能有空格

[[email protected] network-scripts]# val = "123"
-bash: val: command not found
[[email protected] network-scripts]# val="123"
[[email protected] network-scripts]# echo  $val
123

11、Shell脚本会自动决定变量值得数据类型

12、引用变量给给变量赋值

[[email protected] network-scripts]# val="123"
[[email protected] network-scripts]# echo  $val
123
[[email protected] network-scripts]# Val=$val
[[email protected] network-scripts]# echo $Val
123

13、反引号:` `,反引号括起来的是命令,返回的是命令执行后的输出内容

[[email protected] network-scripts]# day=`date +%d`
[[email protected] network-scripts]# echo $day
03
四、重定向输入输出

14、保存某个命令的输出到文件上,而不是通常显示到显示屏上

输出重定向,>  新增; >> 追加; 常用在命令输出重定向到文件

[[email protected] network-scripts]# date > datefile.txt
[[email protected] network-scripts]# cat datefile.txt
Tue May  3 15:37:57 CST 2016
[[email protected] network-scripts]# echo "Hello Worl" > datefile.txt
[[email protected] network-scripts]# cat datefile.txt
Hello Worl
[[email protected] network-scripts]# echo "lzq hello" >> datefile.txt
[[email protected] network-scripts]# cat datefile.txt
Hello Worl
lzq hello

输入重定向,< 文件 该方式从文件获取数据源给到命令执行; << 内联输入重定向 该方式允许重定向输入的数据在命令行而不必是文件

[[email protected] network-scripts]# wc < datefile.txt
 2  4 21
[[email protected] network-scripts]# wc << EOF
> test1
> test2
> test3
> EOF
 3  3 18

EOF字符串用来标识重定向输入的数据的起始和结尾(例如:ftp脚本)

次提示符由PS2变量控制,PS1是主变量

[[email protected] network-scripts]# echo $PS2
>
五、管道

15、某个命令的输出作为某个命令的输入,这称为管道连接(pinping),管道两侧的命令,在第一个命令产生输出之后,立即送到第二个命令,第二个执行完后输出送到第三个....

管道可以搭配重定向输入到文件中

[[email protected] network-scripts]# rpm -qa | sort > rpm.info
[[email protected] network-scripts]# cat rpm.info | less
acl-2.2.49-6.el6.x86_64
aic94xx-firmware-30-2.el6.noarch
alsa-lib-1.0.22-3.el6.x86_64
apr-1.3.9-5.el6_2.x86_64
apr-util-1.3.9-3.el6_0.1.x86_64
atk-1.30.0-1.el6.x86_64
atmel-firmware-1.3-7.el6.noarch
.....
六、数学运算

使用方括号和一个$符号($[数学表达式])将数学表示括起来

[[email protected] network-scripts]# var=$[1 * 7]
[[email protected] network-scripts]# echo $var
7

bash shell只支持整数除法,如果需要运算浮点数,可以使用支持浮点运算的z shell

[[email protected] network-scripts]# var=$[3 / 2]
[[email protected] network-scripts]# echo $var
1

bc计算器其实是允许你在命令行输入浮点表达式、解释表达式、计算并返回结果的一种编程语言

[[email protected] ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty‘.
12 / 7
1
12 // 7
(standard_in) 2: syntax error
14 /0.7
20
scale=2 #该变量必须设置,控制小数点位数
12 / 7
1.71
quit

-q选项 屏蔽欢迎信息

[[email protected] ~]# bc -q #加上-q 选项是为了屏蔽欢迎信息
scale=2
12 /7
1.71

在bc内部定义变量并运用,该变量只能在bc中使用

val=0.6
12 / val
20.00

如何在脚本中运用,把表达式作为输出通过管道给到bc计算器

[[email protected] ~]# echo "val=0.5; scale=2; 12 / val" | bc
24.00

内联重定向结合bc计算器的运用(bc计算器只能识别输入重定向)

[[email protected] ~]# val=`bc << EOF
> scale=4
> 12 / 8
> EOF`
[[email protected] ~]# echo $val
1.5000
七、退出脚本

shell中运行的每个命令都是用退出状态码来告诉shell它完成了处理

查看退出状态码 ($?)

[[email protected] ~]# date
Tue May  3 17:49:24 CST 2016
[[email protected] ~]# echo $?
0

Linux退出状态码

状态码 描述
0 命令成功结束
1 通用未知错误
2 误用shell命令
126 命令不可执行(无权限)
127 没有找到命令
128 无效的退出参数
128+x Linux信号x的严重错误
130 命令通过Ctrl+C终止
255 退出状态码越界

exit命令指定退出状态码

[[email protected] ~]# vim exitstatus.sh
[[email protected] ~]# chmod 755 exitstatus.sh
[[email protected] ~]# ./exitstatus.sh
Hello World
[[email protected] ~]# echo $?
5
[[email protected] ~]# cat exitstatus.sh
#! /bin/bash
echo "Hello World"
exit 5
时间: 2024-10-13 13:37:21

第10章:构建基本的脚本_《shell脚本大全 第二版》的相关文章

10个实战及面试常用的shell脚本--1

###10个实战及面试常用的shell脚本 写脚本之前的一些注意事项 1.开头加解释器: #!/bin/bash 2.语法缩进,使用4个空格,多加注视说明 3.命名规则: 变量名大写 局部变量小写 函数名小写 名字体现出实际作用 4.默认变量是全局的,在函数中的变量local指定为局部变量,避免污染其他作用域 5.两个命令帮助调试脚本: set -e 遇到执行非0时退出脚本 set -x 打印执行过程 6.写完后要测试再到生产 1.获取本机ip地址(有的需要根据机器来修改,不全通用) metho

shell脚本介绍 shell脚本结构和执行 date命令用法 shell脚本中的变量

一.shell脚本介绍shell脚本要想写好,必须通过不断地去练习写才能写好,没有捷径要在我们拿到一个需求的时候有一个脚本的大致思路,想到需求怎么去实现shell脚本可以大大提高我们的工作效率二.shell脚本结构和执行[[email protected] ~]# mkdir shell //创建一个shell文件夹,存放实验的shell脚本[[email protected] ~]# cd shell/[[email protected] shell]# ls[[email protected

Dockerfile 构建后端springboot应用并用shell脚本实现jenkins自动构建

Dockerfile 文件构建docker镜像 FROM centos MAINTAINER zh*****eng "z*******ch.cn" ENV LANG en_US.UTF-8 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone WORKDIR /home RUN mkdir JDK COPY jdk-8u

Dockerfile 构建后端tomcat应用并用shell脚本实现jenkins自动构建

Dockerfile 文件构建docker镜像 FROM centos MAINTAINER zhaoweifeng "zh******tech.cn" ENV LANG en_US.UTF-8 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone WORKDIR /home RUN mkdir JDK COPY jdk

FTP 脚本 to Shell脚本&amp;bat脚本&amp;python脚本

---- linux Shell 脚本: #!/bin/bash cd /home/ftpuser source ~/.bash_profile FTPIP=127.0.0.1 ftpUser=ftpuser ftpPasswd=123456 DIR=upfile DUMPFILE=DY`date +_%Y%m%d`00001_000.tar.gz echo ${FTPIP} echo ${DUMPFILE} ftp -n<<! open ${FTPIP} user ${ftpUser} ${

7个shell脚本实例--shell脚本练习必备

概述 看多shell脚本实例自然就会有shell脚本的编写思路了,所以我一般比较推荐看脚本实例来练习shell脚本.下面分享几个shell脚本实例. 一.监测Nginx访问日志Exception情况,并做相应动作 假设服务器环境为lnmp,监控出现Exception错误,并钉钉通知. #场景: #1.访问日志文件的路径:/data/logs/plateno-coupon-server/plateno-coupon-server.log#2.脚本死循环,每10秒检测一次,10秒的日志条数为300条

[Android]Recovery调用外部Shell脚本,Shell脚本使用ui_print方法

busybox_bin=/sbin/busybox # 获取PIPE get_outfd(){ if $busybox_bin ls -l /proc/self/fd/21 | $busybox_bin grep -q 'pipe'; then echo 21 else local all_pipe_file=/tmp/all_pipe_file.txt $busybox_bin ls -l /proc/self/fd/ > $all_pipe_file $busybox_bin grep 'p

20.1-4 shell脚本介绍 shell脚本结构和执行 date命令用法 shell脚本中的变量

20.1 shell脚本介绍20.2 shell脚本结构和执行20.3 date命令用法%w 星期几 %W今年的第几周cal是显示日历的时间戳可以相互查询 20.4 shell脚本中的变量 原文地址:http://blog.51cto.com/13450039/2104595

编写MAC记录与端口扫描脚本的shell脚本

MAC记录与端口扫描脚本 1.需求描述编写名为system.sh的小脚本,记录局域网中各主机的MAC地址,保存到/etc/ethers文件中:若此文件已存在,应先转移进行备份:每行一条记录,第1列为IP地址,第2列为对应的MAC地址检查有哪些主机开启了匿名FTP服务,扫描对象为/etc/ethers文件中的所有IP地址,扫描的端口为212.命令测试分析:记录局域网中各主机的MAC地址,保存到/etc/ethers文件中:若此文件已存在,应先转移进行备份:检查有哪些主机开启了匿名FTP服务,扫描对