4、使用bash 命令来执行 格式 bash /路径/脚本文件名.sh不需要执行权限
shell变量
变量的定义是:可以存放一个可变的值的空间
常见的shell变量有自定义变量、环境变量、预定义变量
一般使用echo 输出变量,变量名的格式=$变量名
1、自定义变量
自定义变量是用户根据自己的环境自己定义的变量
Bash 中比较简单的变量,不用进行提前声明,而是直接指定变量名称并赋给初始值,
定义变量的基本格式为变量名=变量值等号两边不允许出现空格
变量名称只能以字母和下划线开头 名称中不能包含+。*、-、/、?、%......等一些特殊字符。
举例:
来进行定义一个变量名字为Linux值为7.2(注意大小写)
[root@jingpan ~]#
Linux=7.2
[root@jingpan ~]# echo $Linux
7.2
[root@jingpan ~]#
linux=6.5
[root@jingpan ~]# echo $linux
6.5
[root@jingpan ~]# echo $Linux
7.2
可以直接在命令行定义,以上就是定义一个变量并赋予值,通过echo进行输出变量 $
是引用变量的特殊字符(必须使用$符号)
echo 和调用的变量之间必须要有空格
举例2
当需要一起调用两组变量时
[root@jingpan ~]# Linux=7.5
[root@jingpan ~]# linux=6.5
[root@jingpan ~]# echo $Linux $linux
7.5 6.5
直接使用echo
后面跟$调用的变量,如果有多个则空格隔开
举例3:
当变量名和后面的字符容易混淆的时候应该使用{}将变量名括起来
[root@jingpan ~]# echo
$Linuxsystem
[root@jingpan ~]# echo
{$Linux}system
{7.5}system
[root@jingpan ~]# echo ${Linux}system
7.5system
read命令
除了上面的赋值之外还可以使用read命令进行赋值,read命令用来提示用户输入信息,从而实现简单的交互式过程(其实我们所输入的命令就是一种交互的过程)
执行时需要从标准输入设备键盘读取一行,并以空格为分隔符
比如我同时定义两个变量操作如下所示
[root@jingpan ~]# read dell
hp
1 2
[root@jingpan ~]# echo $dell
1
[root@jingpan ~]# echo $dell $hp
1 2
[root@jingpan ~]#
为了交互更加的形象,提高易用性,加上 -p选项来设置提示信息
[root@jingpan ~]# read -p "input
your passwd:" passwd
input your passwd:123456
[root@jingpan ~]# echo $passwd
123456
[root@jingpan ~]#
数值变量的运算
shell 脚本的数值运算多用于脚本程序的过程控制(如循环次数,使用量比较等)
在shell环境中,只能进行比较简单的整数运算
运算符与变量之间必须有一个空格,整数的运算主要是通过内部命令expr命令进行运算
格式 变量1 运算符 变量2
其中 变量1、变量2、......对应的需要计算的数值变量(需要$符号调用)常用的几种运行符如下所示
加法运算:+
减法运算:-
乘法运算:\*
除法运算:/
求模(取余)运算:%
[root@jingpan ~]# A=10
[root@jingpan ~]# B=20
[root@jingpan ~]# expr $A +$B
expr: 语法错误
[root@jingpan ~]# expr $A +$B
expr: 语法错误
[root@jingpan ~]# expr $A + $B
30
[root@jingpan ~]# expr $A+$B 10+20
[root@jingpan ~]# expr $A + $B
30
[root@jingpan ~]# clear
[root@jingpan ~]# expr $A + $B
30
[root@jingpan ~]# expr $A+$B 10+20
[root@jingpan ~]# expr $A * $B
expr: 语法错误
[root@jingpan ~]# expr $a \* $B
200
[root@jingpan ~]# expr $a / $B
0
[root@jingpan ~]# expr $a % $B
10
[root@jingpan ~]# abc=$(expr $A
+ $B)
[root@jingpan ~]# echo $abc
30
特殊 shell变量
1、环境变量
环境变量是指系统本身运行需要由linux 系统提前建好的一类变量
主要用于用户的工作环境,包括(用户的宿主目录,命令的查找路径,用户的当前目录,登录的终端等)环境变量的值由操作系统本身自己维护,附着用户的状态改变而改变
使用evn调取当前环境变量
[root@jingpan ~]# env
XDG_SESSION_ID=47
HOSTNAME=jingpan.net
TERM=linux
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.199.231 51450 22
SSH_TTY=/dev/pts/0
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=zh_CN.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=192.168.199.231 51450 192.168.199.116 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env
环境变量配置文件在/etc/profile(全局)
用户宿主目录/home/zhangsan/.bash_profile(局部)
$PWD
pwd 命令就是调用了这个变量才能进行输出
[root@jingpan ~]# echo
$PWD
/root
[root@jingpan ~]# cd /etc/
[root@jingpan etc]# echo $PWD
/etc
$PATH
定义命令的默认搜索路径,我们讲的mysql可执行程序优化的时候我们是直接将程序路径写到了这个变量中才可以再往任何目录下进行输入
注:只有自己执行的命令在PATH变量包括的目录下,才可以直接使用并使用tab补齐。如果不在$PATH所包括的路径下,只能写相关路径或绝对路径。
例:将我们所写的脚本放到$PATH的默认搜索路径中去
1、 将/home/jingpan/shell目录写入到PATH的环境变量中,但是还没有永久生效
[jingpan@jingpan shell]$
PATH="$PATH:/home/jingpan/shell"
[jingpan@jingpan /]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/home/jingpan/shell
2 、永久生效
vim /etc/profile #所有用户生效
vim /home/.bash_profile #指定用户生效
需要重启系统
在最后追加PATH="PATH:/root"
立即生效
soruce /etc/profile #重新加载
测试:
/home/jingpan/shell下的可执行程序可以在任何目录下直接执行。
每个用户还有自己的环境变量都在自己的程序的宿主目录中
2、位置变量
为了使用shell脚本程序:是为方便通过命令行为程序提供参数 Bash引用了位置的概念
当执行命令操作的第一个字段表示命令字或程序名,其余的字符串参数按照从左到右的顺序依次给位置变量赋值
位置变量也称为位置参数,使用$1 $2 $3 ...$9表示、
[jingpan@jingpan shell]$ vi add.sh
#!/bin/bash
SUM=$(expr $1 + $2 )
echo "$1 + $2"= $SUM
[jingpan@jingpan shell]$ sh add.sh 10 20
10 + 20= 30
3、预定义变量
$#:命令行中位置变量的个数(程序执行了几个位置参数)
$*:所有位置变量的内容(具体的内容,比如/root就是一个具体的内容)
$?:上一条命令执行后返回的状态,当返回状态值为0时,表示 执行正常,非0时值表示执行异常或出错
判断是不出现错误正常为0,异常错误为非0 取值在1-127之间
$0:当前执行的进程/ 程序名(就是当前执行的命令或程序的名字)
$!:表示上一个命令最后一个参数
_______________________________________________________________________________________________
sed
________________________________________________________________________________________________
awk
AWk是一种优良的文本处理工具,Linux和Unix环境中现有的功能最强大的数据处理引擎之一。这种
编辑及数据操作语言的最大功能取决于一个人所拥有的知识。awk命令:Alfred Aho Peter
Weinberger和
brian kemighan三个人的姓的缩写
最简单报地说,AWK是一种用于处理文本的编程语言工具。
任何awk语句都是由模式和动作组成,一个awk脚本可以有多个语句。模式决定动作语句的触发条件和触发时间。
特殊字段
BEGIN 语句设置计数和打印头部信息,在任何动作之前进行。
END语句输出统计结果,在完成动作之后执行。
分隔符默认是空格,可以用-F,改变成逗号为分隔符 -F,或改成冒号-F:
准备要显示的内容:
vim result.txt
andy 4 85 92 78 94 88
bob 6 89 90 75 90 86
claire 9 84 88 80 92 84
dave 5 94 52 84 86 NA