linux安装与shell命令

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得到内核的版本号
各自的优缺点:

  1. \ ` 基本上可用在全部的 unix shell 中使用,若写成 shell script ,其移植性比较高。但反单引号容易打错或看错。
  2. $()并不是所有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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值