【shell编程】父子shell和特殊变量

shell变量

查看目录树:pstree

环境变量可以临时创建,退出shell后消失,如要永久生效,需要修改配置文件

  • 用户个人配置文件~/.bash_profile、 ~/.bashrc 远程登录用户特有文件
  • 全局配置文件 /etc/profile、 /etc/bashrc, 且系统建议最好创建在 /etc/profile.d/ 而非直接修改主文件,修改全局配置文件,影响所有登录系统的用户

检查系统环境变量的命令

  • set 输出所有变量,包括全局变量、局部变量
  • env 只显示全局变量
  • declare 输出所有的变量, 如同set
  • export, 显示和设置环境变量值

撤销环境变量

  • unset 变量名 删除变量或函数

设置只读变量

  • readonly 只有shell结束 只读变量失效。直接readonly 显示当前系统只读变量

系统保留环境变量关键字

bash内嵌了诸多环境变量,用于定义bash的工作环境

# 取出环境变量的名字
export | awk -F '[ :=]' '{print $3}'
# bash多命令执行
ls /data/;cd /tmp/;cd /home; cd /data

环境变量初始化与加载顺序

  1. ssh登录Linux后, 系统启动一个bash shell. bash会读取若干个系统环境文件,检查环境变量设置
  2. /etc/profile:全局环境变量文件 为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置
  3. 然后读取/etc/profile.d目录下的脚本,有系统诸多脚本,也放入自定义需要登录加载的脚本,便于用于登陆后立即运行脚本
  4. 运行 $HOME/.bash_profile(用户环境变量文件)
  5. 运行$HOME/.bashrc

shell特殊参数变量

【shell编程】父子shell和特殊变量_第1张图片

特殊变量

$0 获取Shell脚本文件名,以及脚本路径
$n 获取shell脚本的第n个参数, n在1-9之间,如$1$2$9,大于9则需要${10}参数空格隔开
$# 获取执行的shell脚本后面的参数总个数
$* 获取shell脚本所有参数,不加引导等同于$@作用,加上引号"$*"作用是接收所有参数为单个字符串:如 "$1 $2 $3"
$@ 不加引号同上,加引导,是接收所有参数为独立字符串 如 "$1" "$2" "$3" 空格保留、

特殊状态变量

$? 上一次命令执行状态返回值 0正确,非0失败
$$ 当前shell脚本的进程号
$! 上一次后台进程的PID
$_ 取得上次执行的命令的最后一个参数

shell子串

bash基础内置命令

echo 打印
-n 不换行输出
-e 解析字符串中的特殊符号

\n 换行 \r回车 \r制表符四个空格 \b退格

eval 执行多个命令
eval ls;cd /tmp

exec  # 不创建子进程,执行后续命令,且执行完毕后,自动exit

#!/bin/bash
`date`  # 查看当前时间日期
`who`  # 查看谁登录系统
() # 开启子shell执行命令结果
``=$()  # 相同,在括号中执行命令,且拿到命令的执行结果
${var}=$var #变量结果

shell子串的花式用法

${变量} 返回变量值
${#变量} 返回变量长度,字符长度
${变量:start} 返回变量start数值之后的字符
${变量:start:length} 提取start之后的length限制的字符
${变量#word}  从变量开头删除最短匹配的word子串
${变量##word} 从变量开头删除最长匹配的word子串
${变量%word}  从变量结尾删除最短匹配的word
${变量%%word} 从变量结尾删除最长匹配的word
${变量/pattern/string} 用string代替第一个匹配的pattern
${变量//pattern/string} 用string代替所有的pattern

特殊shell拓展命令

这四个扩展变量,都属于对变量的值进行判断、处理

# 如果parameter变量值为空,返回word字符串,赋值给result变量
# 不为空,parameter值赋值给result
result=${parameter:-word}

# 如果parameter变量值为空,则word替换变量值,且返回其值
#不为空:parameter值赋值给result
result=${parameter:=word}

# 如果parameter变量为空,word当作stderr输出,否则输出变量值,用于设置变量为空导致错误时,返回的错误信息
# 不为空,忽略word
result=${parameter:?word}

# 如果parameter变量为空,什么都不做,否则word返回
result=${parameter:+word}

怎么让程序后台执行

后台执行ping命令,并将日志写入/dev/null

nohup ping www.baidu.com & 1> /dev/null

# 统计字符串长度
1、echo $name | wc -l
2、expr length "${name}"
3、echo "${name}" | awk '{print length($0)}'
4、echo ${#name}

# 删除7天以上的过期数据
find 需要搜索的目录 -name 搜索的文件名字 -type 文件类型 -mtime +7 | xargs rm -f
-mtime +7 # 7天以上

Shell编程-基础(一)

你可能感兴趣的:(chrome,前端)