Shell解释器介绍,Shell变量,如何编写以及执行shell脚本

Shell解释器介绍

Shell编程:
   就是把我们写的Linux命令封装到1个文件中, 这个文件就叫: Shell脚本. 它是可以被执行的.
从编写, 到执行的完整过程, 称之为:; Shell编程.
# Shell脚本的执行, 底层需要用到Shell解释器, Linux的众多发行版, 默认的Shell解释器是: /bin/bash
[root@node1 ~]# cat /etc/shells     # 查看当前Linux系统支持哪些Shell解释器
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
[root@node1 ~]# echo $SHELL            # 查看当前Linux系统使用的, 默认的Shell解释器
/bin/bash
# 扩展: Shell中的变量是一种很"弱"的变量, 它分为: 用户变量, 环境变量, 特殊变量.
# 强弱的划分依据是: 对数据的数据类型划分是否精细.
  精细: 强类型, 例如: SQL, Java, 
  不精细: 弱类型, python, shell
# Linux中定义变量的格式
变量名=变量值        
# 变量的注意事项
1. 定义变量的时候, 等号两端没有空格.
2. 变量名可以由英文字母, 数字, 下划线组成, 其中: 数字不能开头. 
3. 变量名不要和关键字重名, 且最好做到见名知意.
4. 如果变量值中间有空格, 要用引号包裹变量值, 建议使用: 双引号.
5. 变量值中可以用\表示转移符, 例如: \n就表示换行, \t表示制表符(相当于4个空格)


Shell变量

shell变量--用户变量

变量入门(用户变量)

[root@node1 ~]# name=zhangsan        # 定义name变量, 变量值是: zhangsan
[root@node1 ~]# echo name                 # 输出name, 没写$, 表示输出内容
name
[root@node1 ~]# echo ${name}            # 输出变量name的值.
zhangsan
[root@node1 ~]# echo $name               # 同上, 如果不涉及到拼接等复杂操作, 可以省略大括号.
zhangsan
[root@node1 ~]# echo $name是我的名字     # 拼接, 输出.
zhangsan是我的名字
[root@node1 ~]# echo $name23           # 拼接, 输出. 没加大括号, 所以 name23变成1个整体了.
[root@node1 ~]# echo ${name}23        # 这个才是正常的拼接, 输出.
zhangsan23
[root@node1 ~]# name=lisi                 # 重新修改name变量的值, 为: lisi
[root@node1 ~]# echo $name            # 输出
lisi
[root@node1 ~]# unset name            # 删除name变量, 相当于没有定义它, 后续不能用了.
# 或者本次会话断开, 变量也会被释放.
[root@node1 ~]# echo $name           # 因为变量name已经删除了, 这里打印的结果是: 空
[root@node1 ~]# age=18
[root@node1 ~]# readonly age         # 设置变量age为 只读变量(只能用, 不能改, 不能删)
[root@node1 ~]# age=20                 # 尝试修改只读变量, 报错
-bash: age: 只读变量
[root@node1 ~]# echo $age
18
[root@node1 ~]# unset age            # 尝试删除只读变量, 报错
-bash: unset: age: 无法反设定: 只读 variable

关于引号的问题

# 细节: 双引号, 可以引用变量的值,   单引号, 表示原样输出.
[root@node1 ~]# name=zhangsan lisi            # 定义变量, 变量值有空格, 报错
-bash: lisi: 未找到命令
[root@node1 ~]# name='zhangsan lisi'        # 用引号包裹变量值即可.
[root@node1 ~]# echo $name
zhangsan lisi
[root@node1 ~]# new_name='$name wangwu'        # 如果单引号包裹, 原样输出.
[root@node1 ~]# echo $new_name 
$name wangwu
[root@node1 ~]# new_name2="$name wangwu"    # 如果是双引号包裹, 可以引用变量的值.
[root@node1 ~]# echo $new_name2
zhangsan lisi wangwu
[root@node1 ~]# str="This's zhangsan"    # 如果内容涉及到引号了, 就: 外双内单, 外单内双.
[root@node1 ~]# echo $str
This's zhangsan

Shell变量--环境变量

# 配置环境变量的目的
在任意的路径下, 都能使用(环境变量中)配置好的内容.

# 例如:
之所以能在任意的路径下使用 cd, ls等命令, 是因为 /usr/bin  /usr/sbin已经配置
到path环境变量中了.

# 如何查看环境变量
[root@node1 ~]# env
XDG_SESSION_ID=233
HOSTNAME=node1
TERM=linux
SHELL=/bin/bash
HADOOP_HOME=/export/server/hadoop
HISTSIZE=1000
SSH_CLIENT=192.168.88.1 59719 22
SSH_TTY=/dev/pts/0
name=hangge        # 手动设置的环境变量
USER=root
age=18            # 手动设置的环境变量
MAIL=/var/spool/mail/root
PATH=/export/server/jdk1.8.0_241/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/export/server/hadoop/bin:/export/server/hadoop/sbin:/root/bin
PWD=/root
JAVA_HOME=/export/server/jdk1.8.0_241
LANG=zh_CN.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
CLASSPATH=.:/export/server/jdk1.8.0_241/lib
SSH_CONNECTION=192.168.88.1 59719 192.168.88.161 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env

# 如何设置环境变量
# 方式1: 临时设置, 会话结束, 自动断开.
export 变量名=变量值            # 例如: export name=zhangsan

# 方式2: 永久设置.
vim /etc/.bashrc      # 只针对于当前用户有效.
vim /etc/profile    # 针对于所有用户有效, 推荐.

# 细节: 设置完之后, 需要刷新下配置文件, 才能生效.
思路1: 登出(ctrl + d), 重新登入

思路2: 命令实现, 即:  source /etc/profile

# 扩展, 取消Linux的邮箱校验.
vim /etc/profile
按G到文件的末尾, 然后按o, 向下插入一行, 然后输入 unset MAILCHECK
按esc, 输入 :wq 保存退出. 
source /etc/profile 刷新即可.


如何编写以及执行shell脚本

编写Shell脚本

1. 在后缀名为.sh的文件中进行编写, 当然, 文件后缀名可以是其它的, 建议是 .sh
2. 文件的第一行建议是 #!/bin/bash 表示指定Shell解释器.
3. 除了第1行的#外, 其它行的#都是 注释.

示例: 编写Shell脚本
vim my.sh

#!/bin/bash

echo '这是我的第1个Shell脚本'

# 记得 :wq保存退出

执行Shell脚本

# 方式1: sh 脚本名.sh
sh my.sh    # 不需要对 my.sh脚本 有执行权.

# 方式2: source 脚本名.sh
source my.sh    # 不需要对 my.sh脚本 有执行权.

# 方式3: 相对路径
./my.sh        # 要有执行权

# 方式4: 绝对路径
/root/my.sh    # 要有执行权


  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值