文章目录
1、安装操作系统
安装操作系统
网络配置:
1、修改主机名:/etc/hostname
2、设置静态IP: vim /etc/sysconfig/network-scripts/ifcfg-ens33
ONBOOT改成yes
BOOTPROTO=static
添加如下行:
IPADDR=192.168.182.147
NETMASK=255.255.255.0
GATEWAY=192.168.182.2
DNS1=192.168.182.2
重启网络服务:
3、修改linux域名映射文件 /etc/hosts
192.168.182.147 hdp1
4、修改windows域名映射文件 C:\Windows\System32\drivers\etc\hosts
192.168.182.147 hdp1
2、Shell变量
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
变量可以分为 用户自定义变量、系统环境变量
-
定义变量:
变量名=变量值
例如:
x = 5
name = “xiaoming”(等号左右不能有空格) -
变量调用:
例如:
echo $x
echo $name -
设置环境变量
export 变量名=变量值
或
变量名=变量值
export 变量名 -
查看环境变量
set -
系统环境变量配置文件
/etc/profile
-
位置参数变量
3、Shell数值运算
例:
num1=1
num2=2
运算1:sum1=$num1+$num2 打印:echo $sum1 结果:2+3
运算2:sum2=$((num1+num2)) 打印:echo $sum2 结果:3
运算3:sum3=$[num1+num2] 打印:echo $sum3 结果:3
运算4:sum4=$(expr $num1 + $num2) 打印:echo $sum4 结果:3
运算5:sum5=`expr $num1 + $num2` 打印:echo $sum5 结果:3
运算6:declare -i sum6=$num1+$num2 打印:echo $sum6 结果:3
$(())
$[]
$(expr )
`expr `
4、运算符
4.1 算术运算符:
下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | expr $a + $b 结果为 30。 |
- | 减法 | expr $a - $b 结果为 -10。 |
* | 乘法 | expr $a \* $b 结果为 200。 |
/ | 除法 | expr $b / $a 结果为 2。 |
% | 取余 | expr $b % $a 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
**注意:**条件表达式要放在方括号之间,并且要有空格,例如: [ a = = a== a==b] 是错误的,必须写成 [ $a == $b ]。
4.2 关系运算符:
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 |
-ne | 检测两个数是否不相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
4.3 布尔运算符:
下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
! | 非运算,表达式为 true 则返回 false,否则返回 true。 | [ ! false ] 返回 true。 |
-o | 或运算,有一个表达式为 true 则返回 true。 | [ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a | 与运算,两个表达式都为 true 才返回 true。 | [ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
4.4 逻辑运算符:
以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
&& | 逻辑的 AND | [[ $a -lt 100 && $b -gt 100 ]] 返回 false |
|| | 逻辑的 OR | [[ $a -lt 100 || $b -gt 100 ]] 返回 true |
4.5 字符串运算符:
下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:
运算符 | 说明 | 举例 |
---|---|---|
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 检测两个字符串是否相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] 返回 false。 |
-n | 检测字符串长度是否不为 0,不为 0 返回 true。 | [ -n “$a” ] 返回 true。 |
$ | 检测字符串是否为空,不为空返回 true。 | [ $a ] 返回 true。 |
4.6 文件测试运算符:
文件测试运算符用于检测 Unix 文件的各种属性。
属性检测描述如下:
操作符 | 说明 | 举例 |
---|---|---|
-d file | 检测文件是否是目录,如果是,则返回 true。 | [ -d $file ] 返回 false。 |
-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 | [ -f $file ] 返回 true。 |
-r file | 检测文件是否可读,如果是,则返回 true。 | [ -r $file ] 返回 true。 |
-w file | 检测文件是否可写,如果是,则返回 true。 | [ -w $file ] 返回 true。 |
-x file | 检测文件是否可执行,如果是,则返回 true。 | [ -x $file ] 返回 true。 |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true。 | [ -s $file ] 返回 true。 |
-e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 | [ -e $file ] 返回 true。 |
5、shell test 命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
实例演示:
num1=100
num2=100
if test $num1 -eq $num2
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
输出结果:
两个数相等!
4、IF……ELSE 条件语句
比较两个数字大小:
写法1:使用[ ],相当于test命令, Test和[]中可用的比较运算符只有=和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式 。 无论是字符串比较还是整数比较都不支持大于号小于号。如果实在想用,对于字符串比较可以使用转义形式,如果比较"ab"和"bc":[ ab < bc ],结果为真,也就是返回状态为0。[ ]中的逻辑与和逻辑或使用-a 和-o 表示。且[]前后都有空格。
a=2
b=3
if [ $a -eq $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
else
echo "a 小于 b"
fi
写法2:使用[[ ]],是[ ]的针对数学比较表达式和字符串表达式的加强版。 &&、||、<和> 等操作符能够正常存在于[[ ]]条件判断结构中 。
#a=$1
#b=$2
read -p "请输入a:" a
read -p "请输入b:" b
if [[ $a == $b ]]
then echo "a 等于 b"
elif [[ $a > $b ]]
then echo "a 大于 b"
else
echo "a 小于 b"
fi
#打印:a 小于 b
5、 case分支语句
Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:
case工作方式如上所示。取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。
取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
下面的脚本提示输入1到4,与每一种模式进行匹配:
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac
输入不同的内容,会有不同的结果,例如:
输入 1 到 4 之间的数字:
你输入的数字为:
3
你选择了 3
6、循环语句
6.1 for循环
for循环一般格式为:
for 变量 in 元素1 元素2 ... 元素N
do
命令1
命令2
...
命令N
done
例3:顺序输出当前列表中的数字:
#!/bin/bash
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
例4:数字型循环
#!/bin/bash
sum=0
for((i=1;i<=10;i++))
do
sum=$((sum+i))
done
echo $sum
#倒数第三行可换成((sum++))
例5: 路径查找
#!/bin/bash
for file in /bin/*;
do
echo $file is file path \! ;
done
6.2 while
#!/bin/bash
int=1
while(( $int<=5 ))
do
echo $int
((int++))
done
6.3 跳出循环
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。
break命令
break命令允许跳出所有循环(终止执行后面的所有循环)。
下面的例子中,脚本进入死循环直至用户输入数字大于5。要跳出这个循环,返回到shell提示符下,需要使用break命令。
#!/bin/sh
NUMS="1 2 3 4 5 6 7"
for NUM in $NUMS
do
Q=`expr $NUM % 2`
if [ $Q -eq 0 ]
then
break
fi
echo "打印$NUM"
done
#以上 `expr $NUM % 2` 可替换为 Q=$[$NUM%2]
执行以上代码,输出结果为:
打印1
continue
continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。
对上面的例子进行修改:
#!/bin/sh
NUMS="1 2 3 4 5 6 7"
for NUM in $NUMS
do
Q=`expr $NUM % 2`
if [ $Q -eq 0 ]
then
continue
fi
echo "打印$NUM"
done
执行以上代码,输出结果为:
打印1
打印3
打印5
打印7
7、 各种符号说明:
7.1.$()
在 bash shell 中,
(
)
与
‘
(
反
引
号
)
都
是
用
来
做
命
令
替
换
用
(
c
o
m
m
a
n
d
s
u
b
s
t
i
t
u
t
i
o
n
)
的
。
例
如
v
e
r
s
i
o
n
=
( ) 与 ` (反引号) 都是用来做命令替换用(commandsubstitution)的。 例如 version=
()与‘(反引号)都是用来做命令替换用(commandsubstitution)的。例如version=(uname -r)和version= \uname -r都可以是version得到内核的版本号
各自的优缺点:
- \ ` 基本上可用在全部的 unix shell 中使用,若写成 shell script ,其移植性比较高。但反单引号容易打错或看错。
- $()并不是所有shell都支持。
echo `date`
echo $(date)
7.2. $ [] $ (()) :
它们是一样的,都是进行数学运算的。但是注意,bash只能作整数运算,对于浮点数是当作字符串处理的。
i=0
echo $((i+1))
echo $[i+1]
#错误用法
echo $((i++))
7.3. [ ]
即为test命令的另一种形式。
但要注意许多:
1.你必须在左括号的右侧和右括号的左侧各加一个空格,否则会报错。
2.test命令使用标准的数学比较符号来表示字符串的比较,而用文本符号来表示数值的比较。很多人会记反了。使用反了,shell可能得不到正确的结果。
3.大于符号或小于符号必须要转义,否则会被理解成重定向。
num1=100
num2=100
if test $num1 -eq $num2
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
num1=100
num2=100
if [ $num1 -eq $num2 ]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
7.5. (( ))及[[ ]]
它们分别是[ ]的针对数学比较表达式和字符串表达式的加强版。
其中(( )),不需要再将表达式里面的大小于符号转义,除了可以使用标准的数学运算符外,还增加了以下符号:
read -p "请输入a:" a
read -p "请输入b:" b
if [[ $a == $b ]]
then echo "a 等于 b"
elif [[ $a > $b ]]
then echo "a 大于 b"
else
echo "a 小于 b"
fi
read -p "请输入a:" a
read -p "请输入b:" b
if (( $a == $b ))
then echo "a 等于 b"
elif (( $a > $b ))
then echo "a 大于 b"
else
echo "a 小于 b"
fi
for((i=0;i<10;i++))
do
echo $i
done