大数据学习(一),shell


一:安装虚拟机

二:安装基础应用

  由于安装虚拟机时,安装的应用是最小应用,所以其中很多的命令并不能使用,需要下载。这里下载ifconfig和vim。

1.下载ifconfig

yum install -y net-tools

 

2.下载vim

yum install -y vim

3.修改ip地址

cd /etc/sysconfig/network-scripts/
vim ifcfg-ens33

 4.修改虚拟机名称

vim /etc/hostname  修改为hdp1

5.

vim /etc/hosts  添加ip  192.168.13.130 hdp1

6.完成之后重启即可。使用ifconfig查看ip是否修改成功。

三:shell 入门

  一:概念

    Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。同时shell也是一个强大的编程语言

  二:shell解析器

    2.1:查看linux中的shell解析器

[root@hadoop ~]$sudo  cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

    2.2:bash和sh的区别

[root@hadoop ~]$ cd /bin
[root@hadoop bin]$ ll | grep bash
-rwxr-xr-x. 1 root root 941880 5月  11 2016 bash
lrwxrwxrwx. 1 root root      4 5月  27 2017 sh -> bash

         2.3: 默认解析器

[root@hadoop bin]$ echo $SHELL
/bin/bash

  三:创建脚本

    3.1:创建第一个shell脚本

cd opt
mkdir test
cd test
touch helloworld.sh
vi helloworld.sh
输入以下内容
#!/bin//bash
echo "helloworld" 

 

     3.2:执行脚本

      方法一:解析器执行

sh helloworld.sh   或者  bash helloworld.sh

          方法二:绝对路径去运行

赋予执行权限
chmod 777 helloworld.sh
./helloworld.sh

第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限

    3.3:多命令执行

touch batch.sh
vi batch.sh

在batch.sh中输入以下内容
#!/bin/bash

cd /opt/
touch lili.txt
echo "I love summer" >> lili.txt

运行方法如上,其实就是将创建文档和写入包装成一个命令去执行。

注:所有的脚本都以 #!/bin/bash  开头

   四:案例

      4.1:if判断

        输入一个参数,如果是1,则输出I Love Summer,如果是2,则输出I Love Spring,如果是其它,什么也不输出 

if 空格 [空格 条件 空格]

then

  程序
  
elif 空格 [空格  条件 空格]

then

 程序
 
else
 
 程序
fi
#!/bin/bash

if [ $1 -eq 1 ] 
then
 echo "I Love Summer"

elif [ $1 -eq 2 ]
then
  echo "I Love Spring"
fi

      4.2:case语句

case $变量名 in
值1)
   变量值=1执行的程序
;;
值2)
    变量值=1执行的程序
;;
*)
    变量值为其他执行的程序
;;
esac

        输入一个数字,如果是1,则输出hello,如果是2,则输出bye,如果是其它,输出gun

#!/bin/bash

case $1 in 
1)
    echo "hello"
;;
2)
    echo "bye"
;;
*)
    echo "gun"
;;
esac

      4.3:for循环

for((变量;条件;步长增量))
do
    程序
done
for 变量 in 值1 值2 值3… 
  do 
    程序 
  done

          求出 1-100的累加和

#!/bin/bash

s=0
for((i=0;i<=100;i++))
do
    s=$[$s+$i]
done

    echo $s

      4.4:while循环

while  空格[空格 条件判断 空格]
do
    程序
done

          1加到100

#!/bin/bash

s=0
i=1
while [ $i -le 100 ]

do
        s=$[$s+$i]

        i=$[$i+1]

done
echo $s

      

          求n的阶乘

#!/bin/bash

    read -p "请输入一个数作为阶乘" num
    # 先判断这个数位非0的数
    (($num+0)) >/dev/null
    # 判断上次的结果是否正确  
    if [ $? -ne 0 ]
    then
        echo "您输入的值有误,请输入一个数字"
    fi

    # 判断这个数是否<0  小于0也不符合条件
    if [ $num -lt 0 ]
    then
        echo "您输入的数小于0 不符合条件"
    
    else
    # 满足大于0的条件
    sum=1
    for((i=1;i<=$num;i++))
    do
        sum=$[sum*i]

    done
    echo $sum
    fi

    常见经典案例

          2.1:九九乘法表

#!/bin/bash
# 九九乘法表
for((i=1;i<=9;i++))

do
        for((j=1;j<=i;j++))
        do
        echo -ne "$j*$i=$(($j*$i))    "

        done
        echo -ne "\n"
done

           2.2:while循环打印1-5的数字,当数字为4时,输出考生姓名 

#!/bin/bash
# while循环打印1-5的数字,当数字为4时,输出考生姓名
i=1;
while [  $i -le 5 ]
do
echo "$i"
        if [ $i -eq 4 ]
        then
         echo "你的名字"
        fi
        i=$[$i+1]

done

            2.3:斐波那契数列

#!/bin/bash
# 斐波那契数列
read -p "请输入一个数作为最终斐波那契数列的个数" num
# 表示第一个数
a=0
# 表示第二个数
b=1
# 表示第三个数 a+b的和 做统计所以从0开始
c=0
for((i=1;i<=$num;i++))
do
  echo "$a"
  ((c=a+b))
  ((a=b))
  ((b=c))
done

           2.4:打印倒三角,正三角

#!/bin/bash
# 打印倒三角
read -p "请输入一个数作为行数" num
# 外循环  表示的是行数  
for((i=0;i<$num;i++))
do
 #  打印空
 for((j=$i;j>=1;j--))
 do
        echo -ne " "
  done
 # 打印*
  for((k=((2*($num-$i)-1));k>=1;k--))
 do
        echo -ne "*"
 done
 # 换行
 echo -ne "\n"
done
#!/bin/bash
# 打印正三角
for((i=1;i<=5;i++))
do
        for((j=5;j>=$i;j--))
        do
            echo -ne " "
        done
        for((k=1;k<=$[2*$i-1];k++))
        do
            echo -ne "*"
        done

        echo -ne "\n"
done

           2.5:实现批量添加20个用户,用户名为user_1-user_20,密码为user+123

#!/bin/bash
# 实现批量添加20个用户,用户名为user_1-user_20,密码为user+123
count=$1
    for ((i=1;i<=$count;i++))
    do
    # useradd是添加用户的。后面应该还要添加一个用户名。
    #  -d是指定用户的家目录
    #  -s是指定用户的登录shell
    #   例如:useradd  -d  /usr/qqq  -s  /bin/bash  qqq
    useradd -d /home/user_$i -s /bin/bash user_$i;
    # 更新用户密码信息,适用于shell脚本
    echo user_"$i"123 |passwd --stdin user_$i;
   done

            2.6:提示七秒内,读取控制台输入的名称

#!/bin/bash
read -t 7 -p "input your name " NAME
echo $NAME


[bw@hadoop100 datas]$ ./read.sh 
input your name jiabw
jiabw

      

            2.7:判断输入的是否是数字,且是正数还是负数

   (($num+0)) 可以通过  $?  这种方式进行查看 是否成功 是否是数字,  >/dev/null   是为了清理数据,相当于丢进垃圾桶,也可以说是丢进黑洞

#!/bin/bash

read -t 5 -p "请输入一个数值" num

echo "您输入得是:" $num

# 这个数+0得值追加到黑洞中
(($num+0)) >/dev/null
上一步执行不成功   
if [ $? -ne 0 ]

then
    echo "您输入得不是一个数"
else
    if [ $num -lt 0 ]
    then
        echo "您输入得是一个负数"
    elif [ $num -gt 0 ]
    then    
        echo "您输入得是一个正数"
    fi
fi
https://blog.51cto.com/xiaowangzai/2090964#:~:text=%E9%A6%96%E5%85%88%E5%A4%A7%E5%AE%B6%E5%85%88%E6%9D%A5%E7%9C%8B%E4%B8%80%E4%B8%8B%E4%BD%BF%E7%94%A8echo%20%E8%BF%9B%E8%A1%8C%E8%AE%A1%E7%AE%97%E7%9A%84%E6%97%B6%E5%80%99%EF%BC%8C%E5%AD%97%E7%AC%A6%20%2B%20%E6%95%B0%E5%AD%97%E4%BC%9A%E6%98%AF%E4%BB%80%E4%B9%88%E6%95%88%E6%9E%9C%E3%80%82%20%E5%9C%A8%E8%BF%99%E4%B8%AA%E4%BE%8B%E5%AD%90%E4%B8%AD%EF%BC%8Cshell,%E4%BC%9A%E6%8A%8A%E5%AD%97%E7%AC%A6%E5%BD%93%E5%81%9A0%E6%9D%A5%E8%AE%A1%E7%AE%97%EF%BC%8C%E5%A6%82%E6%9E%9C%E6%88%91%E4%BB%AC%E6%83%B3%E5%88%A4%E6%96%AD%E7%94%A8%E6%88%B7%E8%BE%93%E5%85%A5%E7%9A%84%E6%98%AF%E5%90%A6%E4%B8%BA%E6%95%B0%E5%AD%97%EF%BC%8C%E9%82%A3%E5%B0%B1%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20echo%20%24%20%28%20%28%E5%8F%98%E9%87%8F%2B1%29%29%E5%8E%BB%E5%88%A4%E6%96%AD%EF%BC%8C%E5%A6%82%E6%9E%9C%E4%B8%BA1%EF%BC%8C%E9%82%A3%E4%B9%88%E7%94%A8%E6%88%B7%E8%BE%93%E5%85%A5%E7%9A%84%E4%B8%BA%E5%AD%97%E7%AC%A6%EF%BC%8C%E5%A6%82%E6%9E%9C%E4%B8%BA%E6%95%B0%E5%AD%97%EF%BC%8C%E9%82%A3%E4%B9%88%E7%BB%93%E6%9E%9C%E4%B8%8D%E4%B8%BA1.