shell(1)

bash变量类别:

本地变量 : 又叫局部变量,仅对当前shell进程有效

环境变量 : 当前shell及其子shell,子子shell….

特殊变量 : $?  上一个命令执行的状态,0表示执行成功。失败的代码有很多。

[email protected]:/$ cm kk
程序“cm”尚未安装。 如需运行 ‘cm‘,请要求管理员安装 ‘config-manager‘ 软件包
[email protected]-Virtual-Machine:/$ echo $?
127
[email protected]-Virtual-Machine:/$ echo $?
0

变量赋值:

[email protected]:/$ age=23
[email protected]-Virtual-Machine:/$ echo $age
23

将变量的值赋给另一个变量:

[email protected]:/$ age=23
[email protected]-Virtual-Machine:/$ age1=$age
[email protected]-Virtual-Machine:/$ echo $age1
23

现在有个问题,执行上面代码后,age和age1的值各是多少?age1的值会不会随着age的变化而变化?下面将age新赋一个值 ,看一下

[email protected]Virtual-Machine:/$ age=24
[email protected]-Virtual-Machine:/$ echo $age
24
[email protected]-Virtual-Machine:/$ echo $age1
23

现看下面这段代码,当age的值存在时,把age的值赋给变量,不存在是将后面的值赋给变量

[email protected]:/$ result=${age-40}
[email protected]-Virtual-Machine:/$ echo $result
24
[email protected]-Virtual-Machine:/$ result=${age2-40}
[email protected]-Virtual-Machine:/$ echo $result
40

当age值存在时赋值,不存在时返回错误信息:

[email protected]:/$ result=${age?‘error‘}
[email protected]-Virtual-Machine:/$ echo $result
24
[email protected]-Virtual-Machine:/$ result=${age2?‘error‘}
bash: age2: error

想想上面的代码有什么用?试一下

[email protected]:/$ result=${age3?‘age3 does not exist‘}
bash: age3: age3 does not exist

输出:

echo $age
echo "hello"
#输出后不换行
echo -n ‘hello‘
#让转义符生效
echo -e ‘hello\tworld‘
echo -e "hello\nworld"

单引号: 强引用 ,引号里的字符串不论是什么,原封不动

双引号: 弱引用,引号里的变量替换成变量的值

反引号: 就是键盘上~下面的字符,命令替换

[email protected]:/$ age=23
[email protected]-Virtual-Machine:/$ echo ‘i am $age‘
i am $age
[email protected]-Virtual-Machine:/$ echo "i am $age"
i am 23
[email protected]-Virtual-Machine:/$ echo "today is `date +%F`"
today is 2016-01-25

变量的引用

${varname}

花括号有时可以省略,有时不行,看一下

[email protected]:/$ age=23
[email protected]-Virtual-Machine:/$ echo $age
23
[email protected]-Virtual-Machine:/$ animal=pig
[email protected]-Virtual-Machine:/$ echo "There are some ${animal}s"
There are some pigs
[email protected]-Virtual-Machine:/$ echo "There are some $animals"
There are some

为什么最后面输出显示变量没有值?因为将animals识别成一个变量了。

变量的撤销:

[email protected]:/$ age=23
[email protected]-Virtual-Machine:/$ echo $age
23
[email protected]-Virtual-Machine:/$ unset age
[email protected]-Virtual-Machine:/$ echo $age

只读变量:不可以撤销,不可以修改

[email protected]:/$ readonly animal=pig
bash: animal: 只读变量
[email protected]-Virtual-Machine:/$ unset animal
bash: unset: animal: 无法反设定: 只读 variable

环境变量的声明:

[email protected]:/$ export AGE

也可以在声明的时候赋值

[email protected]:/$ export AGE

环境变量名一般全部大写

下面介绍几个命令:

#查看所有环境变量的命令(3个)
env
printenv
export

新增环境变量路径

export PATH=/usr/local/apache/bin:$PATH

命令替换:

[email protected]:/$ echo "Today is `date +%F`"
Today is 2016-01-25
[email protected]-Virtual-Machine:/$ echo `date +%F-%H:%M:%S`
2016-01-25-16:47:22

生成序列

[email protected]:/$ seq 3
1
2
3
[email protected]-Virtual-Machine:/$ seq 3 6
3
4
5
6
[email protected]-Virtual-Machine:/$ seq 1 3 10
1
4
7
10

export 生成的环境变量会在shell重启或重启系统后丢失,那么我们则可以通过配置文件来保存环境变量

#全局文件
/etc/profile,   /etc/profile.d/*   , /etc/bashrc

#个人文件
~/.bash_profile   ~/.bashrc

配置文件加载顺序

#交互式
/etc/profile     /etc/profile.d/*     /bash_profile    ,     ~/.bashrc   /etc/bashrc

#非交互式
~/.bashrc     /etc/bashrc    /etc/profied/*

#如果同一个环境变量存在多个配置文件中,以最后加载的配置文件为准

配置文件类别

profile 类:设定环境变量,运行命令或脚本(用户登录之前或bash启动之前)

bashrc 类:设定本地变量,设定命令别名

配置文件修改完成之后,需要使用下面命令使其生效,比如:

souce ~/.bash_profile

命令别名:

alias vi=vim
alias cdnet=‘cd /etc/sysconfig/network-scripts/‘
unalias vi    #撤消别名

输入重定向:

command < file

输出重定向

command > file

1 是标准输出  2是错误输出

command 2>file

正确和错误统统重定向:

command > file 2>&1   #都输出到file

command > file 2 > file2  #输出到不同的文件

command &>file   合并输出流

管道:

command | command2       #把第一个命令的输出当作第二个命令的输入

command | command2 | command3 | … | commandN

需要注意的是管道只传递正确的执行结果,遇到错误就终止了

[email protected]:/$ echo "abc" | tr "a-z" "A-Z"
ABC
[email protected]-Virtual-Machine:/$ echo ‘AbCd‘ | tr ‘ABCD‘ ‘abcd‘
abcd

记录一个命令

cut –d’ ’ –f2 将字符串以空格切割,输出第二个

cut –d: –f2   以:切割

uniq  移出重复的行

有时会遇到这种情况:

[email protected]:/$ ls /var/log |file
Usage: file [-bchikLlNnprsvz0] [--apple] [--mime-encoding] [--mime-type]
            [-e testname] [-F separator] [-f namefile] [-m magicfiles] file ...
       file -C [-m magicfiles]
       file [--help]

因为file 后面必须要跟上一个文件,没有就不行, 这种情况下我们可以用-代替

[email protected]:/$ ls /var/log |file -
/dev/stdin: ASCII text

file  是查看文件类型

再记录一个命令tee

command | tee /tmp/tee.out |command2    #将command的结果保存到tee.out然后再传递给command2
时间: 2024-08-04 15:31:00

shell(1)的相关文章

【Linux系列】【基础版】第四章 Shell基础之正则表达式

4. Shell基础之正则表达式     4.1 正则就是一串有规律的字符串         4.1 grep              4.1.1 格式: grep [-cinrvABC] 'word' filename             4.1.2 -c //count,表示行数             4.1.3 -i //不区分大小写             4.1.4 -n  //显示行号             4.1.5 -r  //遍历所有子目录             4

linux Shell函数

Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以速度很快,另外,Shell还能对函数进行预处理,所以函数的启动比脚本更快. 1.函数定义 1 2 3 4 function 函数名() {     语句     [return] } 关键字function表示定义一个函数,可以省略,其后是函数名,有时函数名后可以跟一个括号,符号"{"表示函数执行命令的入口,该符号也可以在函数名那一行,"}"表示函数体的结

Shell实现跳板机,为什么用跳板机

整理自:http://blog.chinaunix.net/uid-22101889-id-3167454.html 注意:请谨慎使用,到现在为止,使用了,我还没找到改回去的方法. 1.     问题 第一.很多大公司的服务器都不允许直接登录,而是通过一个跳板机才能登录过去.在跳板机中,通常只能执行几个少数命令(如SSH),而其他命令是不允许执行的,那么怎样才能实现这个功能呢? 第二.一些小公司,由于服务器比较少,不需要什么跳板机之类的说法,公司的开发运维人员加起来也就那么十几二十人,通常大家都

linux shell基础语法

1.第一个Shell脚本 打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了. 输入一些代码: #!/bin/bash echo "Hello World !" "#!" 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell.echo命令用于向窗口输出文本. 运行Shell脚本有两种方法. 1.1作为可执行程序 将上面的代码保存为t

shell中test命令方法详解

test命令用法.功能:检查文件和比较值 1)判断表达式 if test  (表达式为真) if test !表达式为假 test 表达式1 –a 表达式2                  两个表达式都为真 test 表达式1 –o 表达式2                 两个表达式有一个为真 2)判断字符串 test –n 字符串                                   字符串的长度非零 test –z 字符串                          

shell脚本

-e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]-d filename 如果 filename为目录,则为真 [ -d /tmp/mydir ]-r filename 如果 filename可读,则为真 [ -r /var/log/syslog ]-w filename 如果 filename可写,则为真 [ -w /var/mytmp.txt ]-x filename 如果 filename可执行,则为真 [ -L /usr/bin/gr

20.5 Shell脚本中的逻辑判断;20.6 文件目录属性判断;20.7 if特殊用法;20.8 20.9 cace判断(上下)

扩展: select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.5 Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 1. 创建if1.sh测试脚本: [[email protected] ~]# vi if1.sh a=5,如果a大于3,满足这个条件,显示ok 添加内容: #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi 2. 执行if1.sh脚本: [[e

20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量

20.1 Shell脚本介绍 1. shell是一种脚本语言 aming_linux blog.lishiming.net 2. 可以使用逻辑判断.循环等语法 3. 可以自定义函数 4. shell是系统命令的集合 5. shell脚本可以实现自动化运维,能大大增加我们的运维效率 20.2 Shell脚本结构和执行 1. 开头(首行)需要加: #!/bin/bash 2. 以#开头的行作为解释说明: 3. 脚本的名字以.sh结尾,用于区分这是一个shell脚本 4. 执行.sh脚本方法有两种:

shell 中seq的用法 echo -n用法

用法:seq [选项]... 尾数 或:seq [选项]... 首数 尾数 或:seq [选项]... 首数 增量 尾数 从1循环到100的两种方法(bash 其它的shell没试过)for x in `seq 1 100`;do echo $x;donefor x in {1..100};do echo $x;done echo -n 不换行输出 $echo -n "123" $echo "456" 最终输出 123456 echo -e 处理特殊字符 若字符串中

shell之数组的使用

数组 Array 一段连续的内存空间 1) 定义数组 [[email protected] shell]# aa[0]=martin [[email protected] shell]# aa[1]=jerry [[email protected] shell]# aa[2]=mike [[email protected] shell]# aa[10]=alice [[email protected] shell]# bb=(192.168.1.1 192.168.1.2 192.168.1.3