博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell基础2
阅读量:7033 次
发布时间:2019-06-28

本文共 4024 字,大约阅读时间需要 13 分钟。

hot3.png

10月12日任务

8.6 管道符和作业控制

8.7/8.8 shell变量

8.9 环境变量配置文件

 

管道符 |

管道符的作用: 将其左边命令的输出作为右边命令的输入

例如:

[root@localhost ~]# cat /etc/passwd | grep 'root'root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin

作业控制

  • ctrl + Z 可以让运行的进程暂停
# sleep命令 休眠命令[root@centos7 ~]# sleep 100^Z[1]+  已停止               sleep 100[root@centos7 ~]# sleep 200^Z[2]+  已停止               sleep 200[root@centos7 ~]# sleep 1000^Z[3]+  已停止               sleep 1000
  • jobs 查看后台进程
# 查看后台的命令进程[root@centos7 ~]# jobs[1]   已停止               sleep 100[2]-  已停止               sleep 200[3]+  已停止               sleep 1000
  • fg 将后台进程调用到前台运行
# fg ID 调用特定的进程,让其在前台运行,不加ID默认调用最后一个[root@centos7 ~]# fg 2sleep 200^Z[2]+  已停止               sleep 200
  • bg 将前台进程调到后台运行,前台可以执行其他命令
[root@localhost ~]# bg 1[1] sleep 100 &[root@localhost ~]# jobs[1]   运行中               sleep 100 &[2]-  已停止               sleep 200[3]+  已停止               sleep 1000
  • & 使进程后台运行
# &符号,让命令在后台运行,可以使用fg命令调出至前台[root@centos7 ~]# sleep 10 &[4] 1037

shell变量

环境变量:PATH、HOME、PWD、LOGNAME... SSH_TTY(当前终端号)

获取当前系统下的变量

  • env 命令(获取的是系统内置环境变量)
# root用户的系统系统环境变量,其他用户稍有不同;env命令不会显示用户自定义的变量![root@centos7 ~]# envXDG_SESSION_ID=1HOSTNAME=centos7SELINUX_ROLE_REQUESTED=TERM=xtermSHELL=/bin/bashHISTSIZE=1000SSH_CLIENT=192.168.65.1 50839 22SELINUX_USE_CURRENT_RANGE=SSH_TTY=/dev/pts/0USER=root...
  • set命令(除了系统内置的环境变量还会显示用户自定义的变量)
[root@localhost ~]# setBASH=/bin/bashBASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepathBASH_ALIASES=()BASH_ARGC=()BASH_ARGV=()BASH_CMDS=()BASH_LINENO=()BASH_SOURCE=()BASH_VERSINFO=([0]="4" [1]="2" [2]="46" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")BASH_VERSION='4.2.46(1)-release'COLUMNS=74DIRSTACK=()EUID=0GROUPS=()HISTCONTROL=ignoredupsHISTFILE=/root/.bash_historyHISTFILESIZE=1000HISTSIZE=1000HOME=/rootHOSTNAME=localhost.localdomainHOSTTYPE=x86_64ID=0IFS=$' \t\n'LANG=zh_CN.UTF-8...

变量命名规则

[root@localhost ~]# a_1=111[root@localhost ~]# echo $a_1111
  • 由字母、数字、下划线组成,且首位不能为数字

变量的值

[root@localhost ~]# a='a b c'[root@localhost ~]# echo $aa b c
  • 值包含特殊符号,使用单引号包括(空格、$、#等)

变量的累加

[castiel@centos7 ~]$ a=1[castiel@centos7 ~]$ b=2[castiel@centos7 ~]$ echo $a$b12# 单引号会保留特殊符号[castiel@centos7 ~]$ a='a$bc'[castiel@centos7 ~]$ echo $aa$bc#双引号会对特殊符号进行换算,在此之前,bc变量不存在,所以b=a[castiel@centos7 ~]$ b="a$bc"[castiel@centos7 ~]$ echo $ba# 当前$b为a,c变量被赋值为aac[castiel@centos7 ~]$ c="a$b"c[castiel@centos7 ~]$ echo $caac

全局变量

# 查看当前登录的终端[root@localhost ~]# echo $SSH_TTY/dev/pts/0
  • 全局变量:在系统某个终端shell及其生成的子shell内都存在的变量;
  • 自定义变量:只在当前终端下有效的变量;

export命令可以将shell内自定义的变量变为全局变量,但是需要注意的是 export命令只在当前shell及其子shell下有效,在其父shell内是无效的!!!

归纳总结

  • 使用export命令生成的全局变量,在父shell内是无效的!
  • 在脚本内执行export命令可以使由脚本生成的子shell共享自定义变量;
  • pstree命令可以查看当前shell在整个进程树的位置(yum install psmics)
# 子shell内设置全局变量a,在其(上行)父shell内该变量无效,其他终端的shell内也无效![root@centos7 ~]# bash[root@centos7 ~]# export a=123[root@centos7 ~]# exitexit[root@centos7 ~]# echo $a# 在当前shell内设置全局变量,其子shell内也有效[root@centos7 ~]# export a=123[root@centos7 ~]# echo $a123[root@centos7 ~]# bash[root@centos7 ~]# echo $a123

环境变量配置文件

系统层次

  • /etc/profile 用户环境变量,在交互、登录login时才执行
  • /etc/bashrc 交互non-login,执行shell就生效

用户层次

  • ~/.bashrc
  • ~/.bash_profile
  • ~/.bash_history 当前shell内执行命令的历史记录
  • ~/.bash_logout 用户退出登录时执行的操作
# 在用户退出时清空其历史命令记录[root@localhost ~]# echo "echo > ~/.bash_history" >> ~./bash_logou

用户的某些自定义需求命令可以通过储存在.bashrc.bash_profile文件内,使之在每次登录shell时生效!!同样的也可以设置在.bash_logout文件内,使之退出后生效。

login和non-login shell的区别

  • 在机器上直接用户密码登录,使用sshsu切换用户登录---login

  • 不登录系统而使用ssh直接在远程执行命令---non-login

  • 登录系统后,打开一个新的teminal,该terminal登录为non-login !

login shell     调用.bash_profile文件non-login shell 调用.bashrc文件!注意:.bash_profile文件执行时也会调用.bashrc

结论:要想某些设置一定被shell调用,最好将其写入bashrc文件中!!!

提示符

  • PS1 默认的提示符
[root@centos7 ~]# echo $PS1[\u@\h \W]\$\u 当前用户\h hostname\W 当前目录(相对路径)\w 当前目录(绝对路径)\$ root为#,普通用户$
  • PS2 多行连续输入换行行首提示符(例如for循环)
[root@centos7 ~]# echo $PS2>
  • PS3 shell脚本使用select时的提示符
[root@centos7 ~]# echo $PS3
  • PS4 使用 set -x 跟踪命令执行时的输出前缀
[root@centos7 ~]# echo $PS4+

转载于:https://my.oschina.net/u/3964535/blog/2244582

你可能感兴趣的文章
Facebook 的开源地图正在挖掘互联网的空白
查看>>
Intellij IDEA创建Maven Web项目
查看>>
《基于模型的软件开发》——3.3 多态
查看>>
工信部批准,“中国开源软件推进联盟PostgreSQL分会”正式成立
查看>>
《精通ArcGIS Server 应用与开发》——1.6 小结
查看>>
《高可用架构·中国初创故事(第3期)》一导读
查看>>
如何进入 Docker 容器 【已翻译100%】
查看>>
《Docker进阶与实战》——1.4节概念澄清
查看>>
《SolidWorks 2016中文版机械设计从入门到精通》——1.3 常用工具命令
查看>>
Chrome 移动端用户破 10 亿:Web 不死,或将消灭 App
查看>>
统治 Web 的 JavaScript 准备要接管桌面了
查看>>
图表长在地图上 —— 定制 Marker 样式组件
查看>>
Terraform 0.3 发布,基础架构管理工具
查看>>
《嵌入式系统开发之道——菜鸟成长日志与项目经理的私房菜》——01-04限制!限制!限制!...
查看>>
程序员获取编程灵感的 10 种方式
查看>>
《数据结构与算法:Python语言描述》一1.2 问题求解:交叉路口的红绿灯安排...
查看>>
《软技能:代码之外的生存指南》一一2.15 我可不能保证你能够一鸣惊人
查看>>
《Unity着色器和屏幕特效》——1.2 导入项目文件
查看>>
《自顶向下网络设计(第3版)》——2.1 可扩展性
查看>>
《Excel数据可视化:一样的数据不一样的图表》——3.3 用数据条的长度代表数值大小...
查看>>