设为首页 收藏本站
查看: 1084|回复: 0

Bash shell和变量详解

[复制链接]

尚未签到

发表于 2018-8-29 09:10:13 | 显示全部楼层 |阅读模式
  本文的结构:bash shell简介-->变量和变量操作、数组-->bash的环境配置文件分析
  什么是shell

  •   操作系统是一组软件,用于控制整个硬件和管理系统活动,若直接使用操作系统,操作不当会导致系统崩溃,用户不可随意操作,所以通过“shell”将我们输入的命令与内核通信,让内核准确的控制硬件工作
  •   shell是在操作系统上开发的应用程序,是用户可操作的最外层,也就是“shell”壳
  什么是bash

  •   Bourne Again SHell,Bourne shell的增强版
  •   shell有很多版本,很多东西都一样,出现后就会有很多的发展者,像操作系统有很多种是一样的道理
  •   shell种类查看:
  [root@boxin ~]# cat /etc/shells   // 文件记录了所有合法的shell
  /bin/sh
  /bin/bash     
  /sbin/nologin
  /bin/dash
  /bin/tcsh
  /bin/csh

  •   用户登录时根据 /etc/passwd 的记录获得shell
  [root@boxin ~]# cat /etc/passwd
  root:x:0:0:root:/root:/bin/bash
  bin:x:1:1:bin:/bin:/sbin/nologin
  daemon:x:2:2:daemon:/sbin:/sbin/nologin
  adm:x:3:4:adm:/var/adm:/sbin/nologin
  bash shell 功能

  •   命令记忆(history)
  1:最多1000条
  2:[-c 删除目前history] [-a 同步进文件] [-n 最近n条记录]
  3:历史记录在~/.bash_history 文件中中(前一次登录以前的命令,这一次的缓存在内存中)

  •   补全功能(Tab)
  •   别名(alias)
  •   作业控制、前台fg、后台bg
  •   脚本(shell script)
  •   通配符(Wildcard)
  •   内置命令 type [-a 查看命令的所有来源] [-t 查看命令执行的首个来源] 命令
  linux下的变量
  1:什么是变量:存在于内存空间中的,一组文字或符号组成,用于替代一些设置或数据,特别是复杂或变动的数据

  •   例1:PATH变量的值为 /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local
  •   例2:MAIL变量用于访问邮箱,当不同用户登录shell时,MAIL就赋值为相应的用户的邮箱,如boxin用户 MAIL=/var/spool/mail/boxin,mail命令使用MAIL变量
  2:变量设置规则

  •   变量名开头不可为数字
  •   单双引号
  [root@boxin ~]# lang="lang is $LANG"   //双引号,保持特性
  [root@boxin ~]# echo $lang
  lang is en_US.UTF-8
  [root@boxin ~]# lang='lang is $LANG'    //单引号,纯文本
  [root@boxin ~]# echo $lang
  lang is $LANG

  •   反单引号`` 和 $()
  [root@boxin ~]# version=$(uname -r)    //命令执行结果作为变量作为外部输入信息
  [root@boxin ~]# echo $version
  2.6.32-431.el6.x86_64
  [root@boxin ~]# version=`uname -r`
  [root@boxin ~]# echo $version
  2.6.32-431.el6.x86_64

  •   删除变量内容
  ${变量#}    从头开始删掉符合#后面替换文字“最的那个”
  ${变量##} 从头开始删掉符合#后面替换文字“最的那个”
  ${变量%}   从后面开始删掉符合#后面替换文字“最的那个”
  ${变量%%} 从后面开始删掉符合#后面替换文字“最的那个”

  •   变量替换
  ${变量/A/B} 将第一个A替换成B
  ${变量/ /A/B} 将所有的A替换成B

  •   变量内容测试和替换(是否为空 或 不存在)
  aname=${name-newname}    // 若name 不存在,则改为newname
  aname=${name:-newname}    // 若name 不存在或为空,则改为newname
  aname=${name=newname}    //  直接name改为newname

  •   增加变量内容
  [root@boxin ~]# version="$version"hello
  [root@boxin ~]# echo $version
  2.6.32-431.el6.x86_64hello
  [root@boxin ~]# version=${version}hello
  [root@boxin ~]# echo $version
  2.6.32-431.el6.x86_64hellohello

  •   取消变量:unset 变量名
  3:环境变量

  •   env:(environment) 查看本shell下所有的环境变量
  •   set:查看环境变量 + 自定义变量
  •   export:将自定义变量改为环境变量
  4:语系变量 locale (影响显示和结果)
  [root@boxin ~]# locale    //usr//lib//locale
  LANG=en_US.UTF-8     //主语言设置,其他语系变量会被这两个变量代替(LANG  LC_ALL),一般设置LANG就ok
  LC_CTYPE="en_US.UTF-8"
  LC_NUMERIC="en_US.UTF-8"
  [root@boxin ~]# cat /etc/sysconfig/i18n
  LANG="en_US.UTF-8"
  SYSFONT="latarcyrheb-sun16"
  5:变量读取:read     [root@boxin ~]# read atest
  this is a test
  [root@boxin ~]# echo $atest
  this is a test
  [root@boxin ~]# read -p "your name :" named            //-p提示符  -t 秒数
  your name :boxin
  [root@boxin ~]# echo $named
  boxin
  6:数组:例子说明,关联和一般数组差别在于:索引从0开始的数字变成自定义

  •   一般数组
DSC0000.jpg

DSC0001.jpg

DSC0002.jpg


  •   关联数组
DSC0003.jpg

DSC0004.jpg

DSC0005.jpg

  bash的环境配置文件
  结构图
DSC0006.jpg

  登陆欢迎信息

  •   登录前 /etc/issue
  •   登录后 /etc/motd
  login shell

  •   取得bash 时需完整登录流程:输入账号密码
  non-login shell

  •   不需要再次输入账户密码:进入子进程等
  /etc/profile(系统整体设置,login shell会调用)调用以下三个文件目录

  •   /etc/inputre(用户有没有自定义按键功能,TAB键等)
  •   /etc/profile.d/*.sh(目录下.sh 结尾的文件会被调用,所有使用者共享命令别名)
  •   /etc/sysconfig/i18n(语系设置)
  ~/.bash_profile(个人配置文件,login shell才会读)
  ~/.bashrc(根据UID 规范 umask值 和 PS1变量,no-login shell会读)

  •   读取/etc/profile.d/*.sh
  •   读取/etc/bashrc(redhat 才有)


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-557979-1-1.html 上篇帖子: 不看后悔的Linux生产服务器Shell脚本分享 下篇帖子: wdcp的环境搭建shell脚本分析--install.sh
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表