一、shell脚本基本知识
1.基础
1)脚本解释器:
第一行写明解释器,井号在第一行则为解释器,不同的语言用不同的解释器
#!/bin/bash
2)脚本注释:
在非第一行用井号进行注释,可开新行,也可以在该行命令后面,不要用中文
3)脚本执行:
bash test.sh #文件无执行权限都可以执行,推荐方式
./test.sh #使用路径执行,文件需要有执行权限
source test.sh #不启用子进程执行脚本,source和 .作用相同
前两种都会启用子进程,子进程的变量不会传递到主进程,
2.shell脚本规范
脚本第一行指定脚本解释器 开头增加版本及版权信息 脚本中尽量不要使用中文 脚本以.sh为扩展名 脚本应存放在固定的路径里 成对的符合尽量一次性写出来,再退格插入内容 中括号两端至少要有一个空格 对流程控制语句,应一次性写完格式再添加内容 通过缩进让代码更易读
3.引号的用法
- 双引号 常规字符串的定义用双引号.
- 单引号 所见及所得的引用使用单引号.
- 反引号 命令的引用使用反引号.
所有引号为英文状态符号,等号前后不要有空格
二、shell环境变量
系统用export内置命令导出的变量,存在于/etc/profile,/etc/bashrc和用户家目录下的.bash_profile,.bashrc中,要自定义环境变量,要将命令写入上述文件中 环境变量均采用大写字母形式,使用export定义,如export OLDGIRL=1 定时任务crond比较特殊,最好在脚本中重新定义要用的环境变量
1. 环境变量查看
1. 查看所有变量
命令名 | 作用 |
---|---|
set | 输出所有的变量,包括全局变量和局部变量 |
env | 只显示全局变量 |
declare | 输出所有的变量、函数、整数、已导出的变量 |
set -o | 显示bash shell的所有参数配置信息 |
2. 查看指定变量的值
echo $PWD
/home/root
printf $PWD
/home/root
3. 取消设置的变量
unset USER
2. 定义环境变量
1. 三种方法
export NAME=oldboy
declare -x NAME=oldboy
NAME=oldboy ;export NAME
2. 环境变量永久生效
- 用户配置下生效
/root/.bashrc #推荐
/root/.basrc\_profile
- 全局配置下生效
/etc/profile
/etc/bashrc #推荐
/etc/profile.d/
若要在登录后初始化或显示加载内容,则把脚本文件放到/etc/profile.d/下即可
3. 环境变量生效顺序
- 登录方式: /etc/profile-->/etc/profile.d/-->$HOME/.bash_profile-->/$HOME/.bashrc-->/etc/bashrc
- 非登录方式: /$HOME/.bashrc-->/etc/bashrc.
因此需要再非登录shell下也可以读到设置的环境变量是,需要将环境变量写入最后两个文件中
3. 其他
1) 设置登录后shell提示语
/etc/motd #写字符串提示语
/etc/profile.d/oldboy.sh #登录后执行脚本,脚本里面为提示语
2) java环境下自定义环境变量
export JAVA\_HOME=/application/jdk
export CLASSPATH=$CLASSPATH:$JAVA\_HOME/lib:$JAVA\_HOME/jre/lib
export PATH=$JAVA\_HOME/bin:$JAVA\_HOME/jre/bin:$PATH:HOME/bin
export RESIN\_HOME=/application/resin
通常放置在/etc/profile中,并在java脚本中再次定义上述变量
3) 常见系统环境变量
变量 | 用途 |
---|---|
$HOME | 用户登录时进入的目录 |
$UID | 当前用户的uid |
$PWD | 当前工作目录的决定路径 |
$SHELL | 当前shell |
$USER | 当前用户 |
三、普通变量
本地变量只在当前shell生存期中有意义,脚本中启动另一个进程或退出,值都将无效
1. 变量定义要求
变量名由字母、数字、下划线主从,不能以数字开头,变量定义可以使用单引号、双引号、反引号,也可以不用引号
a='laowang'
a="laowang"
a=`pwd`
a=pwd
2. 变量定义和输出经验小结
- 若变量内容为连续的数字或字符串,赋值时,可以不加引号
- 变量的内容很多,或者不是连续字符串时,加双引号
- 希望原样输出变量中的内容时,加单引号
- 赋值的命令要用反引号或括号扩起来,如a=
ls
或者a=$(ls) - 变量名定义要规范,要见名知意,推荐驼峰语法
- 输出变量时,变量名前加$符号
- 变量名后接其他字符时,用大括号单独括变量,{金庸}新著
相关文章
- 导致域控制器卡死 / 重启,微软承认 11 月更新导致 Windows Server 出现 LSASS 内存泄露
- 用Bpftrace去透视Linux内核
- 新来个技术总监,把 RabbitMQ 讲的那叫一个透彻,佩服!
- 为何大厂选择减人而不是降薪?
- 跟着小白一起学鸿蒙—编写一个蓝牙性能Stage HAP
- 照猫画虎把SpringBoot搬到K8s,居然翻船咧,体验到了Go在云原生的两个优势
- OpenHarmony 3.2 Beta多媒体系列—音视频播放Gstreamer
- 用面向对象的方式操作 JSON 甚至还能做四则运算 JSON 库
- 面试官:哥们,Go语言的读写锁了解多少?
- 如何在 VirtualBox 中启用和访问 U 盘
- 聊聊 Go 如何打包与压缩文件
- 深入理解 Synchronized 的锁优化
- Linux 中使用 less,more 和 most 命令来读取文本文件
- 如何通过模板模式重构代码?
- 每个 Linux 用户都应该知道的31条命令
- Go 语言怎么使用变长参数函数?
- bash 脚本中如何拼接字符串
- 五个优秀JavaScript Web 开发框架
- 价值变现的关键是组织优化和数据治理
- 学习设备开发之Hi3861-TCPclient-开关灯