2.变量

变量

yy=123 yy是一个变量名 123是变量值
echo $yy 输出变量值

变量设定的规则

1.变量名与变量内容用=号进行连接,中间不能有空格
2.变量名可以有英文数字和下划线,但不能以数字开头
3.变量内容有空格可以用双引号进行组合
4.单引号内的都只是普通字符,没有任何其他含义
5.可用转意符 \ 将特殊符号(如 [Enter], , \, 空格符, 等)变成一般字符; 6.在一串命令中,想要获取其他命令的结果,可以使用()命令
7.增加变量的内容,可以使用"变量名称"字符串或者${}字符
8.想要变量在子进程执行,需要erport来使变量变成环境变量
9.通常大写字符为系统默认变量,自定义变量使用小写字符
10.取消变量的方式; unset varname

环境变量

常见环境变量

  • PATH,HOME,MAIL,SHELL,PWD,USERNAME,UID,ID
  • RANDOM 随机数
    echo $RANDOM
PS1:(提示字符的设置)
\d :可显示出“星期 月 日”的日期格式,如:"Mon Feb 2"
\H :完整的主机名称。举例来说,鸟哥的练习机为“study.centos.vbird”
\h :仅取主机名称在第一个小数点之前的名字,如鸟哥主机则为“study”后面省略
\t :显示时间,为 24 小时格式的“HH:MM:SS”
\T :显示时间,为 12 小时格式的“HH:MM:SS”
\A :显示时间,为 24 小时格式的“HH:MM”
@ :显示时间,为 12 小时格式的“am/pm”样式
\u :目前使用者的帐号名称,如“dmtsai”;
\v :BASH 的版本信息,如鸟哥的测试主机版本为 4.2.46(1)-release,仅取“4.2”显示
\w :完整的工作目录名称,由根目录写起的目录名称。但主文件夹会以 ~ 取代;
\W :利用 basename 函数取得工作目录名称,所以仅会列出最后一个目录名。
# :下达的第几个指令。
$ :提示字符,如果是 root 时,提示字符为 # ,否则就是 $

env 列出所有环境变量
set 列出系统所有变量
export 使自定义变量转成环境变量
子进程会继承父进程的环境变量,子进程不会继承父进程的自定义变量

bash 的环境变量文件

longin shell
取得shell时需要完整的登入流程;特点是登入时需要用户帐号和密码
non-login shell
取得shell时不需要再次输入帐号和密码的情况下,所得到的 shell

longin shell 会读取以下两个文件:

·/etc/profile· :这是系统整体设定,最好不要修改
·/.bash_profile或/.bash_login或~/.profile` :属于个人的配置文件

/etc/profile 会主动依序调用以下脚本文件:

/etc/inputrc :定义快捷键

/etc/profile.d/*sh :定义bash操作接口颜色、语系、命令别名等

etc/locale.conf :定义系统的默认语系

bash 在读完 /etc/profile 后,接下来会读取以下3个文件,且只会读去一个,会按照以下顺序优先读取
~/.bash_profile //会调用 ~/.bashrc ,
也会有新的环境变量在下面的文件中被添加
~/.bash_login
~/.profile
最终,~/.bashrc 才是最后被读入到系统环境中的文件
让这些环境变量文件中的变量等设置及时在当前 shell 终端中生效,有下两种方式
source ~/.bashrc
或者
. ~/.bashrc

no-longin shell 当取得 no-longin shell 时,该 shell 仅会读取 ~/.bashrc 文件 而~/.bashrc 最后又会调用 /etc/bashrc
/etc/bashrc 的作用:
• 依据不同的UID定义出 umask 值
• 依据不同的UID定义出提示符(就是PS1变量)
• 呼叫 /etc/profile.d/*.sh 的设定
其他的相关配置文件
• /etc/man.config
这个文件最重要的就是定义了MANPATH 这个变量,它定义了man page 的路径;在以tarball的方式安装软件时有用
• ~/.bash_history
历史命令记录文件;记录的数量与HISTFILESIZE变量有关。在/etc/profile里
• ~/.bash_logout
记录了当我注销bash后,系统再帮我做完什么动作后才离开的。

预定义变量

$!    上一次后台命令对应的进程号
$?   上一次命令是否执行成功    0代表成功   !0 代表失败
$$   当前bash的进程号ID

键盘读取

read

-p    后面可以接上提示字符
-t     后面可以跟秒数
如果有-t   ,将其写在最前面

数组

var=(a b c d)  定义数组  以空格隔开
echo ${var[0]}  输出第一个数组的值
echo ${var[*]}  输出数组所有的值
echo ${var[@]} 输出所有
echo ${#var[@]} 输出数组的长度

declare 关联数组

declare -A  查询所有关联数组
declare -A array  定义一个名为array的关联数组
array[name]=shark   将shark赋值给array数组的'name'值

六、变量内容的删除、取代与替换
• 删除
先让小写的 path 自订变量设置的与 PATH 内容相同
[dmtsai@study ~]path={PATH}
[dmtsai@study ~]echo{path}
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/shark/bin

删除最后一个

echo ${path%:*}

% 从字符串的后面开是进行匹配删除,但匹配到第一个时就结束匹配。
:* 就是需要进行匹配的字符串 , : 是普通字符串 * 是通配符,代表任何数量的任意字符串。
所以下面的红色字体的字符串将会匹配后进行删除
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/shark/bin

删除第一个

接着上例的变量进行操作
echo ${path#*:}

是从前面开始匹配删除,匹配到道理和上面的 % 同样的道理
${path#*:} 就是 从变量值的最前面开始匹配,直到遇到第一个 : 结束
所以下面的红色字体会被匹配后删除
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/shark/bin

  • 取代和替换
image

以上不需要都掌握,需要记住下面这个

var=${str:-expr}

strvar 可以是相同的字符串。比如 inpu_date=${inpu_date:-expr}

expr 可以是任意合法的表达式,比如一个字符串,一个子 shell 的命令 $(date +%F)

示例,假如希望用户输入一个日期,当用户没有输入时,就给一个默认值,这里给的是当天的日期

read  -p  "输入日期>:"   input_date

input_date=${input_date:-$(date +%F)}

echo "当前的日期是:${input_date}"

七、时间运算

// 计算 3 小时之后是几点几分
date +%T -d '3 hours'
// 任意日期的前 N 天,后 N 天的具体日期
date +%F -d "20190910 1 day"
date +%F -d "20190910 -1 day"
// 计算两个日期相差天数, 比如计算生日距离现在还有多少天
d1=$(date +%s -d 20180728)
d2=$(date +%s -d 20180726)
echo $(((d1-d2)/86400))
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,381评论 0 5
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,744评论 0 10
  • 说明,本文所使用的机器是:SUSE Linux Enterprise。 问题定位 这看起来像是环境变量引起的问题,...
    lework阅读 2,927评论 6 11
  • 基本命令-2 压缩和归档 打包: 即归档,类似于旅游之前收拾行李 压缩: 为了减少占用的磁盘空间,可以做备...
    崔千易阅读 927评论 0 0
  • 变量之间不能有空格 空格是显示分别出命令和参数 双引号不具有强烈引用 不会改变原有特性单引号是具有强引用会把引住...
    _str_阅读 279评论 0 1