- 1.什么是shell?
- 即可以理解为1.普通的文件
2.linux命令组成
3.编程语言
- 即可以理解为1.普通的文件
- 2.语法
- 文件命名 结尾 一般都是以 .sh 结尾
文件内容 第一行 #!/bin/bash - 1.编写脚本 : helloworld
- [root@bigdata99 shell]# cat wc.sh
#!/bin/bash
echo "www.bigdata.com"
- [root@bigdata99 shell]# cat wc.sh
- 2.运行shell脚本
- 语法 ; 1.sh xxx.sh
- [root@bigdata99 shell]# sh ./wc.sh
www.bigdata.com
- [root@bigdata99 shell]# sh ./wc.sh
- 2.给脚本赋予 执行权限
- chmod 744 ./wc.sh
[root@bigdata99 shell]# ./wc.sh
www.bigdata.com
[root@bigdata99 shell]# /root/shell/wc.sh
www.bigdata.com
- chmod 744 ./wc.sh
- 语法 ; 1.sh xxx.sh
- 文件命名 结尾 一般都是以 .sh 结尾
- 2.定义变量 与 引用
- 1.变量的命名规范:
- 1.命名只能使用英文字母、数字、和下划线、不能以数字开头
2.中间不能有空格、可以使用下划线
3.不能使用linux里面的关键字
- 1.命名只能使用英文字母、数字、和下划线、不能以数字开头
- 2.定义变量
- key=value
- 1.静态:k=v k="v" k='v'
2.动态 k=`v` - 注意: =前后不能有空格
- 引用:$k 或者 ${k}
- 1.变量的命名规范:
- 3.传递参数
- 脚本内获取脚本外的参数 脚本内定一个参数: 格式 $n
- 1.n表示数字
2.n=1 作为脚本的第一个参数 n=2作为脚本的第2个参数...
3.n=0 获取脚本的名字 - eg: [root@bigdata99 shell]# ./parameter.sh "hello" "zs"
hello
zs
[root@bigdata99 shell]# cat parameter.sh
echo "文件名:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "参数的个数:$#"
echo "传递的参数作为一个字符串:$*"
echo "此脚本运行时的pid:$$"
- 1.n表示数字
- 脚本内获取脚本外的参数 脚本内定一个参数: 格式 $n
- 4.数组
- 语法格式:1.元素 是 空格 进行分割
2.arr=(value1 value2 value3 ...)- eg: [root@bigdata99 shell]# cat arr.sh
arr=(zs lisi ww zl wrm)
echo "所有数组元素:${arr[*]}"
echo "第2个元素:${arr[1]}"
echo "数组元素个数:${#arr[*]}"
- eg: [root@bigdata99 shell]# cat arr.sh
- 语法格式:1.元素 是 空格 进行分割
- 5.流程控制
- 1.if else 语法
语法结构:
if condition;then
command
else
command
fi - 2.condition 条件判断
[ 表达式 ]
1.值判断 : true ,false
= 等于
==等于
<= >= > < !=
-eq 等于
-ne 不等于
-lt 小于
-gt 大于
-le 小于等于
-ge 大于等于- 补充:1.[] 前后要有空格 2.关系表达式 前后要有空格
- linux 获取上一个命令是否执行成功:$?
成功 0 true
不成功 非0 false- eg: [root@bigdata99 shell]# cat if.sh
a="zs"
b="zs"
if [ ${a} == ${b} ];then
echo "=="
else
echo "!="
fi
- eg: [root@bigdata99 shell]# cat if.sh
- 3.if elseif 语法
语法结构:
if condition;then
command
elif condition;then
command
else
command
fi - 补充: && ||
- [root@bigdata99 shell]# cat ifelse.sh
- eg :
#统计期末成绩 优良差
# >=90 优 >=60 良 <60 差score=$1
if [ ${score} -ge 90 ];then
echo "优"
elif [ ${score} -ge 60 ];then
echo "良"
else
echo "差"
fi -
循环:for、while
-
1.for : 语法结构
for x in item1 item2 item3 ... itemN
do
command1
...
done
语法结构
for x in item1 item2 item3 ... itemN
do
command1
...
done -
2.fori
打印 10以内的数字
[root@bigdata99 shell]# cat fori.sh
for((i=0;i<10;i++))
do
echo "value is ${i}"
done -
3.while
语法结构:
while condition
do
todo....
done
案例:
打印 10以内的数字
[root@bigdata99 shell]# cat while.sh
# 打印 10以内的数字
i=1
while ((i<=10))
do
echo ${i}
let i++
done
-
- 1.if else 语法
-
6.shell里面常用的分析工具
-
1.awk 文本分析
-
1.获取列数据
[root@bigdata99 ~]# cat test.log
a b c
1 2 3
[root@bigdata99 ~]# cat test.log | awk '{print $1}'
a
1
[root@bigdata99 ~]# cat test.log | awk '{print $2}'
b
2
[root@bigdata99 ~]# cat test.log | awk '{print $1,$2}'
a b
1 2 -
2.获取行数据
[root@bigdata99 ~]# cat test.log | awk 'NR==1{print}'
-
-
2.sed 文本替换
-
1.文本中a 替换成d 每行第一次遇到a 替换成d 【不常用】
sed -i 's/a/d/' test.log -
2.全文替换
sed -i 's/a/d/g' test.log
-
-
-
7.机器克隆
-
1.准备模板机
-
1.网络配置 => ip 静态ip
网卡:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=192.168.41.11
GATEWAY=192.168.41.2
DNS1=192.168.41.2 -
2.机器自带没用的东西 去除掉
-
1.jdk卸载掉:
-
语法: rpm -qa | grep java
-
eg: rpm -e xxx --nodeps
rpm -e xx --nodeps
rpm -e x --nodeps
-
-
-
2.hostname
vim /etc/hostname
bigdata11 -
3.内网ip 与hostname 映射
vim /etc/hosts192.168.41.11 bigdata11
192.168.41.12 bigdata12
192.168.41.13 bigdata13
192.168.41.14 bigdata14
192.168.41.15 bigdata15
192.168.41.16 bigdata16 -
4.防火墙关闭:打开所有端口
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
-
-
3.vmware 虚拟网络
-
1.关闭虚拟机
-
2.虚拟网络:
编辑=》虚拟网络=》vm8=》
子网ip:192.168.41.0
子网掩码:255.255.255.0
nat设置:192.168.41.2 -
3.开机:验证内网ip : ifconfig
192.168.41.11 bigdata11 -
4.远程登录 xshell :
ip
用户名
密码
port
-
-
-
2.克隆机器
-
1.修改克隆机器的内网ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33 -
2.hostname
vim /etc/hostname -
3.重启机器
-
-
Shell
最新推荐文章于 2024-07-20 18:38:43 发布