ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

跟高手学习LINUX笔记-19

2020-03-10 13:57:26  阅读:234  来源: 互联网

标签:node 脚本 19 笔记 echo sh LINUX root bash


第19节 shell基础
本节所讲内容:
19.1 shell 基本语法
终于在前面的章节把centos7基础介绍完成了,余下的几个章节都围绕这几个方面去介绍。
关于shell及脚本,通过工作中的实际应用总结以下几点,请大家斧正:
1、脚本很重要,特别是在linux自动化运维方面
2、脚本要多多练习,最少能读懂。建议是把别人脚本修改成自己的。
3、正则表达式一定要静下心来好好学学
4、三剑客“grep awk sed”一定要熟练掌握
19.1.1 什么是shell
shell:跟它的英文单词的意思一样,是命令解释器,工作在用户与内核之间的命令解释翻译功能
计算机懂什么语言?二进制语言
人类懂什么语言?符号语言
在计算机与人类之间的沟通就需要一个翻译了,这个就是shell横空出现的原因了
通过前面的章节大家知道系统的灵魂是内核,如果每个用户都能去直接操作内核的话,我相信任何一个系统都如玻璃般脆
应用程序-->shell-->内核-->硬件
人类的命令-->键盘输入-->shell-->二进制命令-->内核 输入执行命令的过程
显示命令结果<--显示器显示<--shell<--二进制结果<--内核 输出命令结果的过程
19.1.2 有哪些shell
[root@node-1 ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
常用的是/bin/bash
所在脚本第一行就是:#!/bin/bash 这句话的意思是调用这个shell作为命令解释器
19.2 SHELL变量及运用
19.2.1编写脚本的流程:
1)创建目录,集中存放脚本文件;
2)编写脚本内容;
vi 脚本名.sh ##编辑脚本文件
#!/bin/bash ##声明解释器
#注释内容 ##可以注释些信息,方便后续查看
命令及控制语句 ##脚本的核心内容
:wq ##保存文件
3)赋予脚本文件执行权限:chmod +x 脚本名.sh
4)运行脚本 脚本名.sh;
注意事项:
脚本中的路径建议用绝对路径
例1:牛刀小试一把
[root@node-1 ~]# mkdir /root/bash
[root@node-1 ~]# vim /root/bash/test1.sh
[root@node-1 ~]# cat /root/bash/test1.sh
#this is a test
#!/bin/bash
echo "Nice to meet you!"
mkdir /tmp/aa
touch /tmp/aa/aa.txt
[root@node-1 ~]# chmod +x /root/bash/test1.sh
[root@node-1 ~]# /root/bash/test1.sh
Nice to meet you!

[root@node-1 ~]# ll /tmp/aa /tmp
/tmp:
total 0
drwxr-xr-x 2 root root 19 Mar 10 10:41 aa

/tmp/aa:
total 0
-rw-r--r-- 1 root root 0 Mar 10 10:41 aa.txt
19.2.2 echo命令:返回结果并显示--输入即输出;
语法:echo [选项] "需要返回的值"
选项: 选项-e 若出现特殊字符则不将其转义,当普通字符对待;
在返回值中\n 代表强制换行、\t代表制表符;
内容中的选项:"内容\t内容" 插入tab
"内容\n内容" 强制换行
[root@node-1 ~]# echo -e "my name is \t tom"
my name is tom
[root@node-1 ~]# echo -e "my name is \n tom"
my name is
tom
19.2.3 脚本中的变量的应用;
1.概述:变量是一个筐,筐里装的是变量的值,只需要将筐带走,那么值也就随之带走,值为可变;
[root@node-1 ~]# NAME="tom"
[root@node-1 ~]# echo $NAME
tom
[root@node-1 ~]# NAME="TOM"
[root@node-1 ~]# echo $NAME
TOM
2.优点:简化输入,使脚本内容更加清晰,提高脚本的适用性;
3.分类:自定义变量、环境变量、位置变量、预定义变量;
4.自定义变量的定义:
a.定义变量:变量名=变量值
b.查看变量:echo $变量名
c.使用变量:在命令中直接使用 $变量名
d.取消变量:unset 变量名
e.变量的作用范围:
局部变量:变量名=变量值,此种变量只能在当前bash中有效;
全局变量:export 变量名=变量值,此种变量在当前bash和当前子bash中有效;
注:可用 bash命令开启当前进程的子进程bash,exit退回到父bash进程;
f.变量值中使用的括号:
"" :弱引用,会将双引号内的特殊符号与命令一起执行
[root@node-1 ~]# A="give me $5" --无转义字符
[root@node-1 ~]# echo $A
give me
[root@node-1 ~]# A="give me \$5" --双引号
[root@node-1 ~]# echo $A
give me $5
'' :强引用,会将单引号内的$、"、\等特殊符号失效,全部当成普通字符;
[root@node-1 ~]# A='give me \$5' --单引号
[root@node-1 ~]# echo $A
give me \$5
` :在定义变量时,引用命令,在值中引用变量等同于$(),''不可嵌套,$()可以嵌套;<br/>[root@node-1 ~]# DuEtc=du -sh /etc/` && echo $DuEtc
35M /etc/
$():在定义变量时,引用命令,可以嵌套;例:AC=$(rpm -qf $(which rz))
[root@node-1 ~]# QfNtp=$(rpm -qf $(which ntpdate))
[root@node-1 ~]# echo $QfNtp
ntpdate-4.2.6p5-28.el7.centos.x86_64
注:当变量值中包含'单引号时,应使用\'将单引号进行转义;
g.变量名不能使用特殊符号,一般用大写字母和下划线;
19.2.3 预定义变量:用户只能使用,不能创建,不能直接赋值;
$0:为脚本本身的名称
$:为脚本后的所有参数
$#:脚本参数个数
$?:上一条命令是否执行成功,返回值为0则成功,非0为失败
[root@node-1 ~]# vim /root/bash/print.sh
[root@node-1 ~]# chmod +x /root/bash/print.sh
[root@node-1 ~]# /root/bash/print.sh aa bb
本shell脚本的文件名: /root/bash/print.sh
参数个数: 2
参数有哪些: aa bb
是否执行成功: 0
第1个参数: aa
第2个参数: bb
[root@node-1 ~]# cat /root/bash/print.sh
#!/bin/bash
echo "本shell脚本的文件名: $0"
echo "参数个数: $#"
echo "参数有哪些: $
"
echo "是否执行成功: $?"
echo "第1个参数: $1"
echo "第2个参数: $2"
19.2.4 环境变量的定义:
1)环境变量设置用户工作环境,名称不能修改,值可以修改;
2)环境变量的常用:
PATH=设置外部命令的存放的路径,用冒号隔开
TMOUT=设置登录超时,单位为秒
HISTSIZE=设置历史命令记录的条数
LANG=设置语言环境(vi /etc/sysconfig/i18n 进行永久修改字符集)
注:设置临时环境变量时(注销就失效了):export PATH=
3)环境变量的查看:
env命令查看当前工作环境的所有环境变量
/etc/profile 、/etc/bashrc文件为用户每次登陆执行的的配置文件;
/root/.bash_profile、/root/.bashrc 每个root独立的环境变量配置文件;其他用户也是存在的,在安装oracle时需要对oracle用户相关环境变量进行修改
19.3 实战-安装可升级的java环境-为后期安装Hadoop集群做准备
1) 上传不同版本的jdk软件包到/usr/local/src目录下
[root@node-1 src]# ll
total 326364
-rw-r--r-- 1 root root 142376665 Aug 11 2014 jdk-7u67-linux-x64.tar.gz
-rw-r--r-- 1 root root 191817140 May 3 2019 jdk-8u201-linux-x64.tar.gz
2)安装命令
[root@node-1 src]# tar -zxf jdk-7u67-linux-x64.tar.gz
[root@node-1 src]# mv jdk
jdk1.7.0_67/ jdk-7u67-linux-x64.tar.gz jdk-8u201-linux-x64.tar.gz
[root@node-1 src]# mv jdk1.7.0_67/ /usr/local/
[root@node-1 local]# ln -s jdk1.7.0_67/ jdk
[root@node-1 local]# ll
total 4
drwxr-xr-x. 2 root root 6 Apr 11 2018 bin
drwxr-xr-x. 2 root root 6 Apr 11 2018 etc
drwxr-xr-x. 2 root root 6 Apr 11 2018 games
drwxr-xr-x. 2 root root 6 Apr 11 2018 include
lrwxrwxrwx 1 root root 12 Mar 10 11:25 jdk -> jdk1.7.0_67/
drwxr-xr-x 8 10 143 4096 Jul 26 2014 jdk1.7.0_67
.......
3)配置Java环境变量/etc/profile在最后一行添加以下三行
export JAVA_HOME=/usr/local/jdk/
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
[root@node-1 local]# source /etc/profile
4)验证环境变量
[root@node-1 local]# java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
5)升级java环境
[root@node-1 local]# cd /usr/local/src
[root@node-1 src]# tar -zxf jdk-8u201-linux-x64.tar.gz
[root@node-1 src]# mv jdk1.8.0_201/ /usr/local/
[root@node-1 src]# cd /usr/local/
[root@node-1 local]# ln -snf jdk1.8.0_201 jdk
[root@node-1 local]# ll
total 8
drwxr-xr-x. 2 root root 6 Apr 11 2018 bin
drwxr-xr-x. 2 root root 6 Apr 11 2018 etc
drwxr-xr-x. 2 root root 6 Apr 11 2018 games
drwxr-xr-x. 2 root root 6 Apr 11 2018 include
lrwxrwxrwx 1 root root 12 Mar 10 11:32 jdk -> jdk1.8.0_201
drwxr-xr-x 8 10 143 4096 Jul 26 2014 jdk1.7.0_67
drwxr-xr-x 7 10 143 4096 Dec 16 2018 jdk1.8.0_201
.......
[root@node-1 local]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
无缝升级成功,其他软件版本也可以这样来处理如:nginx等

标签:node,脚本,19,笔记,echo,sh,LINUX,root,bash
来源: https://blog.51cto.com/450955/2476900

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有