1.bash
first 编写第一个脚本
#脚本内容
#!/bin/bash #脚本的声明
#This is my first script! #注释信息,描述信息
#echo Hello World !
echo “Hello World!”
2.bash
脚本的执行
1、解释器执行
格式:解释器 脚本
2、相对路径执行
[root@ZHONG-LONG scripts]# ./first.sh
Hello World!
3、绝对路径执行
[root@ZHONG-LONG scripts]# /root/scripts/first.sh
Hello World!
4、通过脚本名执行
[root@ZHONG-LONG scripts]# . first.sh
Hello World!
5、通过source
[root@ZHONG-LONG scripts]# source first.sh
Hello World!
[root@ZHONG-LONG scripts]# ll
total 16
-rwxr-xr-x 1 root root 79 Aug 16 22:16 first.sh
权限{
r=read 读取
w=write 写入
x=run 执行
权限位组成{
文件的属性(d -)
属主的权限;
属组的权限;
其他人的权限;
}
}
属主(文件的拥有者)
属组(文件的拥有组)
权限的修改{
chmod 命令
}
总结:在生产环境中,最好使用不加权限的方法执行;
3.bash
03-shell 变量
变量的定义:可以存放一个可变的值得空间,可以通过不同的环境进行改变就是一个可以变的值,默认情况下:在Linux中可以将每个shell看成不同的执行环境,所以相同的一个变量名称在不同的变量执行环境中的变量值是不同的
1.1变量格式
变量名称 = 变量值
变量名称不可以是数字、特殊字符开头;
“=” 为变量赋值:
变量的值可以是(数字,字符串,文件的位置,命令,命令的结果)
1.2 shell变量的分类
自定义变量、环境变量、位置变量、预定义变量;
1.3 变量的输出
a=1
ehco a e c h o 输 出 变 量 , 注 意 变 量 名 前 添 加 a echo 输出变量,注意变量名前添加aecho输出变量,注意变量名前添加符号;
2、自定义变量
例1:
[root@ZHONG-LONG scripts]# Linux=6.5
[root@ZHONG-LONG scripts]# echo $Linux
6.5
[root@ZHONG-LONG scripts]# linux=7.2
[root@ZHONG-LONG scripts]# echo $linux
7.2
结论:echo和调用的变量之间必须要有空格,注意大小写的变量的值是不同的
例2:调用多组变量
[root@ZHONG-LONG scripts]# system=centos
[root@ZHONG-LONG scripts]# version=7.4
[root@ZHONG-LONG scripts]# echo $system KaTeX parse error: Expected 'EOF', got '#' at position 49: …G-LONG scripts]#̲ echo sys{Linux}
sys{6.5}
[root@ZHONG-LONG scripts]# echo sys$Linux
sys6.5
结论:直接通过echo 变量名即可
4.bash
shell环境变量
1.1系统自带变量
[root@ZHONG-LONG ~]# echo $PWD
/root
[root@ZHONG-LONG ~]# echo $HOME
/root
[root@ZHONG-LONG ~]# echo $HOSTNAME
ZHONG-LONG
[root@ZHONG-LONG ~]# echo $BASH_VERSION
4.2.46(2)-release
[root@ZHONG-LONG ~]# echo $BASH_VERSINFO
4
[root@ZHONG-LONG ~]# echo $GROUPS
0
[root@ZHONG-LONG ~]# echo $SHELL
/bin/bash
[root@ZHONG-LONG ~]# echo $UID
0
env 查看当前的全局变量
export
5.bash
shell位置变量
$#:传递到脚本的参数个数
$*:以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
$$:及饿哦本运行的当前进程ID号
$!:后台运行的最后一个进程ID
@ : 与 @:与@:与#相同,但是使用时加引号,并在引号中返回每个参数
$-:显示shell使用的当前选项,与set命令功能相同
$?:显示最后命令的退出状态,0表示没有错误,其他任何值表明有错误。
实例1:
[root@ZHONG-LONG shell]# sh 01.sh 1 2
1 + 2 = 3
[root@ZHONG-LONG shell]# cat 01.sh
#!/bin/bash
#This
SUM=$(expr $1 + $2)
echo "$1 + $2 = $SUM"
实例2:
#!/bin/bash
#param.sh
$0:文件完整路径名
echo “path of script : $0”
利用basename命令文件路径获取文件名
echo “name of scropt ?(basename $0)”
$1:参数1
echo “parameter 1 : $1”
$2:参数2
echo “parameter 2 : $2”
$3:参数3
echo “parameter 3 : $3”
$4:参数4
echo “parameter 4 : $4”
$5:参数5
echo “parameter 5 : $5”
$#:传递到脚本的参数个数
echo “The number of arguments passed : $#”
$*:显示所有参数内容
echo “Show all arguments : $*”
$:脚本当前运行的ID号
echo “Process ID : $”
$?:回传码
echo “errors : $?”
6.bash
shell 全局变量与局部变量
env 用来显示环境变量
export 用来显示和设置环境变量
[root@ZHONG-LONG shell]# export linux
[root@ZHONG-LONG shell]# bash
[root@ZHONG-LONG shell]# echo $linux
7.2
#父shell
[root@ZHONG-LONG shell]# export WWW=baidu.com
[root@ZHONG-LONG shell]# echo $WWW
baidu.com
[root@ZHONG-LONG shell]# bash
[root@ZHONG-LONG shell]# echo $WWW
baidu.com
#子shell
[root@ZHONG-LONG shell]# export aa=bb
[root@ZHONG-LONG shell]# echo $aa
bb
[root@ZHONG-LONG shell]# exit
exit
[root@ZHONG-LONG shell]# echo $aa
总结:在父shell中定义的变量可以在子shell中引用,在子shell中定义的变量不能在父shell中引用
7.bash
shell 运算符
expr :数值运算
expr 变量1 运算符 变量2
/
%
运算符与变量之间必须有一个空格,要用\转译
[root@ZHONG-LONG shell]# A=10
[root@ZHONG-LONG shell]# B=20
[root@ZHONG-LONG shell]# expr A + A+A+B
10+20
[root@ZHONG-LONG shell]# expr $A + $B
30
[root@ZHONG-LONG shell]# expr $A - $B
-10
[root@ZHONG-LONG shell]# expr $A * $B
expr: syntax error
[root@ZHONG-LONG shell]# expr $A * $B
200
[root@ZHONG-LONG shell]# expr $A / $B
0
[root@ZHONG-LONG shell]# expr $A % $B
10
#结果赋值给变量
#KaTeX parse error: Expected 'EOF', got '#' at position 27: …ONG-LONG shell]#̲ abc=(expr $A + $B)
[root@ZHONG-LONG shell]# echo $abc
30
#过滤IP地址
[root@ZHONG-LONG shell]# IPADDR=$(ifconfig eth0|grep “inet”|awk ‘{print $2}’)
[root@ZHONG-LONG shell]# echo $IPADDR
172.18.222.249
#双引号" "
#保留当值存在空格或者特殊字符
[root@ZHONG-LONG shell]# webserver=nginx 1.11
-bash: 1.11: command not found
[root@ZHONG-LONG shell]# echo $webserver
[root@ZHONG-LONG shell]# webserver=“nginx 1.11”
[root@ZHONG-LONG shell]# echo $webserver
nginx 1.11
[root@ZHONG-LONG shell]# Linux=7.2
[root@ZHONG-LONG shell]# system=“CentOS $Linux”
[root@ZHONG-LONG shell]# echo KaTeX parse error: Expected 'EOF', got '#' at position 42: …ONG-LONG shell]#̲ system="CentOSLinux"
[root@ZHONG-LONG shell]# echo $system
CentOS7.2
#单引号’’
#当要赋值的内容包括"$"、""等,具有其他含义的特殊字符时,应使用单引号将其括起来
#在单引号范围内将无法引用其他的值,任何字符均作为普通字符看待,但赋值的内容一并输出
[root@ZHONG-LONG shell]# uname
Linux
[root@ZHONG-LONG shell]# uname -r
3.10.0-693.2.2.el7.x86_64
[root@ZHONG-LONG shell]# kernel=“3.10 $Linux”
[root@ZHONG-LONG shell]# echo $kernel
3.10 7.2
[root@ZHONG-LONG shell]# kernel=‘3.10 $Linux’
[root@ZHONG-LONG shell]# echo $kernel
3.10 $Linux
#反撇号#在键盘esc的下边的按键。~ #反撇号主要使用与命令替换,允许将某个命令的屏幕输出结果赋值给变量。 [root@ZHONG-LONG ~]# pwd /root [root@ZHONG-LONG ~]# which pwd /usr/bin/pwd [root@ZHONG-LONG ~]# rpm -qf $(which pwd) coreutils-8.22-18.el7.x86_64 [root@ZHONG-LONG ~]# rpm -q 'coreutils-8.22-18.el7.x86_64' coreutils-8.22-18.el7.x86_64 [root@ZHONG-LONG ~]# rpm -q `rpm -qf `which pwd
rpm: no arguments given for query
which-2.20-7.el7.x86_64
package pwd is not installed
[root@ZHONG-LONG ~]# rpm -q $(rpm -qf $(which pwd))
coreutils-8.22-18.el7.x86_64
#使用反撇号难以在一条命令中实现嵌套命令的操作
[root@ZHONG-LONG ~]# rpm -qf $(which pwd)
coreutils-8.22-18.el7.x86_64