构建基本的脚本

来源:互联网 发布:南方全站仪取数据 编辑:程序博客网 时间:2024/05/17 04:52

一、执行

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

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

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

#! /bin/bash

3、Shell脚本按照顺序执行

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

[root@Study network-scripts]# ./test.sh

二、显示信息

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

[root@Study network-scripts]# echo "Hello World"Hello World

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

[root@Study network-scripts]# echo -n "Hello World "Hello World [root@Study network-scripts]#

*每天生成日志:

echo "waiting $count seconds tomcat stop" >> /root/restartlogs/restart_tomcat_`date +\%Y\%m\%d`.log

三、使用变量

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

[root@Study network-scripts]# setBASH=/bin/bashBASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepathBASH_ALIASES=()BASH_ARGC=()BASH_ARGV=()BASH_CMDS=()BASH_LINENO=()BASH_SOURCE=().....

8、引用变量,在变量名前加{变量名}的方式

[root@Study network-scripts]# echo $USERroot
[root@Study network-scripts]# echo ${USER}root

9、用户变量区分大小写

[root@Study network-scripts]# Val="Val"[root@Study network-scripts]# val="val"[root@Study network-scripts]# echo $valval[root@Study network-scripts]# echo $ValVal

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

[root@Study network-scripts]# val = "123"-bash: val: command not found[root@Study network-scripts]# val="123"[root@Study network-scripts]# echo  $val123

11、Shell脚本会自动决定变量值得数据类型
12、引用变量给给变量赋值

[root@Study network-scripts]# val="123"[root@Study network-scripts]# echo  $val123[root@Study network-scripts]# Val=$val[root@Study network-scripts]# echo $Val123

13、命令替换
(1)反引号字符``,反引号括起来的是命令,返回的是命令执行后的输出内容

[root@Study network-scripts]# day=`date +%d`[root@Study network-scripts]# echo $day03

(2)$( )格式

[root@Study network-scripts]# day=$(date +%d)[root@Study network-scripts]# echo $day03

四、重定向输入输出

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

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

[root@Study network-scripts]# date > datefile.txt[root@Study network-scripts]# cat datefile.txtTue May  3 15:37:57 CST 2016[root@Study network-scripts]# echo "Hello Worl" > datefile.txt[root@Study network-scripts]# cat datefile.txtHello Worl[root@Study network-scripts]# echo "lzq hello" >> datefile.txt[root@Study network-scripts]# cat datefile.txtHello Worllzq hello

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

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

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

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

[root@Study network-scripts]# echo $PS2>

五、管道

15、某个命令的输出作为某个命令的输入,这称为管道连接(pinping),管道两侧的命令,在第一个命令产生输出之后,立即送到第二个命令,第二个执行完后输出送到第三个….
管道可以搭配重定向输入到文件中

[root@Study network-scripts]# rpm -qa | sort > rpm.info[root@Study network-scripts]# cat rpm.info | lessacl-2.2.49-6.el6.x86_64aic94xx-firmware-30-2.el6.noarchalsa-lib-1.0.22-3.el6.x86_64apr-1.3.9-5.el6_2.x86_64apr-util-1.3.9-3.el6_0.1.x86_64atk-1.30.0-1.el6.x86_64atmel-firmware-1.3-7.el6.noarch.....
grep -rn "/id4-weather" localhost_access_log.2017-12-15.txt | awk '{print $9}' | sort|uniq -c|sort
grep -rn "/id5-weather/v1" localhost_access_log.2017-11-11.txt | grep -c 'HTTP/1.1" 405'

六、数学运算

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

[root@Study network-scripts]# var=$[1 * 7][root@Study network-scripts]# echo $var7

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

[root@Study network-scripts]# var=$[3 / 2][root@Study network-scripts]# echo $var1

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

[root@Study ~]# bcbc 1.06.95Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.This is free software with ABSOLUTELY NO WARRANTY.For details type `warranty'.12 / 7112 // 7(standard_in) 2: syntax error14 /0.720scale=2 #该变量必须设置,控制小数点位数12 / 71.71quit

-q选项 屏蔽欢迎信息

[root@Study ~]# bc -q #加上-q 选项是为了屏蔽欢迎信息

scale=212 /71.71

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

val=0.612 / val20.00

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

[root@Study ~]# echo "val=0.5; scale=2; 12 / val" | bc24.00

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

[root@Study ~]# val=`bc << EOF> scale=4> 12 / 8> EOF`[root@Study ~]# echo $val1.5000

七、退出脚本

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

查看退出状态码 ($?)

[root@Study ~]# dateTue May  3 17:49:24 CST 2016[root@Study ~]# echo $?0

Linux退出状态码

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

[root@Study ~]# vim exitstatus.sh[root@Study ~]# chmod 755 exitstatus.sh[root@Study ~]# ./exitstatus.shHello World[root@Study ~]# echo $?5[root@Study ~]# cat exitstatus.sh#! /bin/bashecho "Hello World"exit 5