shell基础(二)

变量

定义变量

  • 定义变量时,变量名不加美元符号
  • 量名和等号之间不能有空格
  • 首个字符必须为字母(a-z,A-Z)
  • 中间不能有空格,可以使用下划线(_)
  • 不能使用标点符号
  • 不能使用 bash 里的关键字

使用变量

只要在变量名前面加美元符号($)
变量名可加上花括号,帮助解释器识别变量边界(推荐加上)

重新定义变量

直接为变量赋值即可

# 定义变量
[root@bogon ~]# username="张三"

# 使用变量
[root@bogon ~]# echo $username
张三
[root@bogon ~]# echo ${username}
张三

# 重新赋值
[root@bogon ~]# username="李四"

只读变量

只读变量不可以被修改,采用readonly 修饰

# 定义变量后修饰
[root@bogon ~]# username="李四"
[root@bogon ~]# readonly username
[root@bogon ~]# username="张三"
-bash: username: readonly variable

# 定义变量时修饰
[root@bogon ~]# readonly address="beijing"
[root@bogon ~]# address="shanghai"
-bash: address: readonly variable

删除变量

直接采用unset 即可

[root@bogon ~]# myurl="www.baidu.com"
[root@bogon ~]# unset myurl

变量类型

1) 局部变量

局部变量在脚本或命令中定义,仅在当前 shell 实例中有效。

2) 环境变量

所有的程序,都能访问环境变量。

3) shell 变量

shell 变量中有一部分是环境变量,有一部分是局部变量。

Shell 特殊变量

特殊变量列表:

变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。

∗和 @ 的区别:

∗和@ 都表示传递给函数或脚本的所有参数,当它们被双引号(" ")包含时,"∗"会将所有的参数作为一个整体,以"1 2…n"的形式输出所有参数;"@"会将各个参数分开,以"1" "2"…"n" 的形式输出所有参数。

[root@bogon ~]# cat ./scripts/args.sh
#!/bin/bash

echo "*打印"
for var in "$*"
do
    echo "$var"
done

echo "@打印"
for var in "$@"
do
    echo "$var"
done
[root@bogon ~]# sh ./scripts/args.sh zhansan lisi wangwu zhaoliu tianqi 
*打印
zhansan lisi wangwu zhaoliu tianqi
@打印
zhansan
lisi
wangwu
zhaoliu
tianqi

退出状态

$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。

退出状态是一个数字,一般情况下,大部分命令执行成功会返回0,失败返回1。

转义字符

加上-e参数即可

[root@bogon ~]# cat ./scripts/test.sh
#!/bin/bash
lang="java"
echo "hello $lang \n"
echo -e "hello $lang \n"
[root@bogon ~]# sh ./scripts/test.sh
hello java \n
hello java 

命令替换

[root@bogon ~]# DATE=`date`
[root@bogon ~]# echo $DATE
2017年 06月 17日 星期六 13:18:44 CST
[root@bogon ~]# USERS=`who | wc -l`
[root@bogon ~]# echo $USERS
3

[root@bogon ~]# cat ./scripts/test.sh
#!/bin/bash

ISSUEINFO=`cat /etc/issue`
echo $ISSUEINFO


[root@bogon ~]# sh ./scripts/test.sh
CentOS release 6.5 (Final) Kernel \r on an \m

变量替换

变量替换可以根据变量的状态(是否为空、是否定义等)来改变它的值

形式 说明
${var} 变量值
${var:-word} 变量 var 为空或已被删除(unset),返回 word,不改变 var 的值。
${var:=word} 变量 var 为空或已被删除(unset),返回 word,并将 var 的值设置为 word。
${var:?message} 变量 var 为空或已被删除(unset),将消息 message 送到标准错误输出。
${var:+word} 变量 var 被定义,返回 word,不改变 var 的值。

运算符

算数运算符

+   加法   
-   减法 
*   乘法   
/   除法   
%   取余   
=   赋值 
==  相等。 
!=  不相等。 

关系运算符

-eq 检测两个数是否相等,相等返回 true。 
-ne 检测两个数是否相等,不相等返回 true。    
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 
-lt 检测左边的数是否小于右边的,如果是,则返回 true。  
-ge 检测左边的数是否大等于右边的,如果是,则返回 true。     
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。

布尔运算符

!   非运算,表达式为 true 则返回 false,否则返回 true。   
-o  或运算,有一个表达式为 true 则返回 true。   
-a  与运算,两个表达式都为 true 才返回 true。

字符串运算符

=   检测两个字符串是否相等,相等返回 true。   
!=  检测两个字符串是否相等,不相等返回 true。  
-z  检测字符串长度是否为0,为0返回 true。   
-n  检测字符串长度是否为0,不为0返回 true。  
str 检测字符串是否为空,不为空返回 true。   

文件测试运算符

文件测试运算符用于检测 Unix 文件的各种属性。

-b file 检测文件是否是块设备文件,如果是,则返回 true。 
-c file 检测文件是否是字符设备文件,如果是,则返回 true。  
-d file 检测文件是否是目录,如果是,则返回 true。  
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。   
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。   
-p file 检测文件是否是具名管道,如果是,则返回 true。    
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。   
-r file 检测文件是否可读,如果是,则返回 true。   
-w file 检测文件是否可写,如果是,则返回 true。   
-x file 检测文件是否可执行,如果是,则返回 true。  
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。  
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 

Shell注释

注释:以“#”开头的行,会被解释器忽略。

shell 块注释

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

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,127评论 2 34
  • 概述 首先,咱们来了解一下,什么是Shell。操作系统内核给我们提供了各种接口,同时也提供了各种用户层的库,理论上...
    keysaim阅读 1,342评论 0 0
  • 早:鸡蛋*1 黄瓜四分之一 红豆红米粥一碗 午:土豆烧鸡一份 冬瓜虾米汤两碗 米饭 香蕉 午点:蛋糕一块 香蕉*1...
    红枣儿姑娘阅读 267评论 0 0
  • 今天从朋友口中得知师父要到外地发展了。内心突然有点小小的失落和伤感。朋友说师父怕我难过,所以一直都没有告诉我...
    特立独行猫一只阅读 167评论 0 2
  • 叹 秋 枫红菊黄秋色浓,桂风玉露诗意重。 条石横涧如卧虎,古松斜挂若苍龙。 浮云漠漠微阳浅,烟霭沉沉山色濛。 日...
    张庆军看世界阅读 479评论 3 18