《Linux shell变量总结回顾》RHEL6

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Linux shell变量总结回顾》RHEL6相关的知识,希望对你有一定的参考价值。

        在实际的生产中,运维一般使用的shell语法还是比较多的,时不时的就要写一个简短shell脚本,大型的shell脚本用到的function 比较多,便于下一个脚本的引入,下面主要总结一些简单的shell命令,语法,便于今后shell脚本的书写。

环境变量路径:

[[email protected] ~]# set   //查看到的是局部变量和全局变量2种

[[email protected] ~]# env  //查看系统的全局环境变量

[[email protected] ~]# echo $PATH  //查看系统环境变量路径

[[email protected] ~]# export $PATH  //也可以使用export查看环境变量路径

[[email protected] ~]# export PATH=$PATH:/date/  //临时添加/date目录到环境变量路径下

要想重启主机后还生效就要编辑环境配置文件root/.bashec或/root/.bash_profile与/etc/profile文件,想要立刻生效可以使用命令:

注:.bash_profile文件支队系统当前用户生效

[[email protected] ~]# source .bash_profile  

[[email protected] ~]# ls –a    可以查看到这2个文件

 

脚本的执行:

sh script    //这种方法script不需要可执行权限

./ script          //必须具有可执行权限

. script           //这种方法script也不需要可执行权限

                       

区分局部变量和全局变量

[[email protected] ~]# str=1000   //局部变量

 

[[email protected] ~]# echo $str

1000

去编辑一个脚本:

# vim bianliang.sh

#!/bin/bash

echo $str

[[email protected] ~]# bianliang.sh  //我们定义的变量,但是通过脚本却不能输出

 

[[email protected] ~]# export str   //添加到全局变量中

[[email protected] ~]# bianliang.sh   //再次使用完全ok

1000

要想完全的清除某个全局变量:

# unset str  清除全局变量

#env   可以查看到所有全局变量

&& || 的用法:(参数的比对)

&& 条件符合要求才会执行后面的动作

||    条件不符合要求时才会执行后面的动作

//查看/ect目录下是否有/grub.conf文件,有则输出yes,无则输出no。

[[email protected] ~]# [ -f /etc/grub.conf ] && echo yes  || echo no 

Yes        

查看/shellscripts/hello.sh是否可执行,可执行则输入yes,否则就赋予它可执行权限

[[email protected] shellscripts]# [ -x /shellscripts/hello.sh ] && echo yes || chmod +x /shellscripts/hello.sh

[[email protected] shellscripts]# ls

hello.sh  ipadd.sh  logmess_clean.sh 

[[email protected] shellscripts]# hello.sh

hello world!   

“”和‘’与 ` ` 在shell变量中的区别       

“ ” 允许通过$符引用其他变量

‘’禁止引用其他变量符,视为普通字符

`` 将命令执行的结果输出给变量

[[email protected] ~]# echo "$PWD is lujing"

/root is lujing

[[email protected] ~]# echo ‘$PWD is lujing‘

$PWD is lujing

[[email protected] ~]# echo $a

1000

[[email protected] ~]# echo $aaaaaaaa  //系统把$aaaaa视为一个变量

 

[[email protected] ~]# echo ${a}aaaaaa   //把变量用{}括起来,系统才会去输出变量

1000aaaaaa

#echo `ls`  反引号中的命令时可以单独执行的,然后再由echo输出

 

扩展:”\ “反斜杠,作用屏蔽字符的特殊意义

test命令

 用途:测试表达式是否成立,成立返回值为0,否返回值为其他值。

 格式:test  条件表达式  [条件表达式]

 

 ≡ 常见的测试类型

      测试文件的状态

      字符的串比较

      整数值比较

      逻辑测试

 

测试文件的状态

   格式:[操作符   文件或目录]

  常见的测试操作符

-d :测试是否为目录【directory】

 

[[email protected] /]# [ -d /var/spool/ ]

[[email protected] /]# echo $?

0

 

-e:测测试目录或文件是否存在【exist】

 

[[email protected] /]# [ -e /etc/passwd ]

[[email protected] /]# echo $?

0

 

-f:测试是否为文件【file】

 

[[email protected] Packages]# [ -f /etc/passwd ]

[[email protected] Packages]# echo $?

0

[[email protected] Packages]#

 

-r:测试当前的用户是否有读取的权限【read】

 

[[email protected] /]# [ -r /etc/shadow ]

[[email protected]lhost /]# echo $?

0

[[email protected] /]#

 

-w:测试当前的用户是否有写的权限【write】

 

[[email protected] /]# [ -w /etc/shadow ]

[[email protected] /]# echo $?

0

[[email protected] /]#

 

-x:测试当前的用户是否可执行和该文件【excute】

 

[[email protected] /]# [ -x /etc/shadow ]

[[email protected] /]# echo $?

1

[[email protected] /]# ll /etc/shadow

----------. 1 root root 1086 2月  26 22:38 /etc/shadow

 

-L:测试是否为符号链接文件【link】

 

 

[[email protected] /]# ll /etc/shadow

----------. 1 root root 1086 2月  26 22:38 /etc/shadow

[[email protected] /]# [ -L /etc/shadow ]

[[email protected] /]# echo $?

1

整数值比较

 格式:[ 整数1 操作符整数2 ]

常用的操作测试符

  -eq:等于(Equal)

  -ne:不等于(Not Equal)

  -gt:大于(Greater Than)

  -lt:小于(Lesser Than)

  -le:小于或等于(Lessser or Equal)

  -ge:大于或等于(Greater or Equal)

案例:

  如果登录用户数小于或等于10则输出YES

 

[[email protected] 桌面]# who|wc -l

2

[[email protected] 桌面]# [ `who|wc -l` -le 10 ] && echo "YES"

YES

 

变量的加减法运算:

变量的加法运算:

[[email protected] ~]# a=1000

[[email protected] ~]# echo $a

1000

[[email protected] ~]# expr $a + $a

2000

[[email protected] ~]# echo $a + $a              //这是2中错误的操作,运算必须使用expr

1000 + 1000

[[email protected] ~]# expr $a+$a                //$a + $a 要有空格否则也是错误的

1000+1000

变量的乘法运算:

[[email protected] ~]# expr $a * $a              //* 在操作系统中视为特殊字符,\屏蔽字符的特殊意义

expr: syntax error

[[email protected] ~]# expr $a \* $a

1000000

[[email protected] ~]# expr 2 / 1      //除法

2

[[email protected] ~]# expr 2 – 1        //减法

1

[[email protected] ~]# expr 2 % 1                //取余

0

位置变量:

0-9           常用的为1-9

通过脚本来看些位置变量:

[[email protected] shellscripts]# cat a.sh

#!/bin/bash

echo $1

echo $2

echo $3

echo $0

[[email protected] shellscripts]# a.sh a b c d e

a

b

c

/shellscripts/a.sh           //$0打印的是脚本笨的名字

 

[[email protected] shellscripts]# a.sh 1 2

3

[[email protected] shellscripts]# a.sh 2 3

5

[[email protected] shellscripts]# cat a.sh

#!/bin/bash

echo `expr $1 + $2`             //$1和$2代表了2个位置变量

[[email protected] shellscripts]#

 

预定义变量

$#  : 命令行中位置参数的个数

$*  : 所有位置参数的内容

$?  : 上一条命令执行后返回的状态,当状态为0时表示正常,非0表示执行异常或出错。

$$  : 当前所在进程的进程号

$!  :  后台运行的最后一个进程号

$0  :  当前执行的进程/进程名

脚本的规范书写:

#!/bin/bash

#Date : 2014-5-28

#Author : Create by meng       //脚本的创始人

#Mail :~~                                   //邮件地址

#Func (do):this is useradd user script.            //脚本的作用

#V1.1                  //脚本的版本

echo "hello,world!"            //后面的才是脚本的内容


 字符串比较

 格式 [ 字符串1 = 字符串2 ]

      [ 字符串1 != 字符串2 ]

      [ -z 字符串 ]

 

常用的测试操作符

  =:字符串内容相同

 !=:字符串内容不相同,!号表示相反的意思

  -z:字符内容为空

#read -p "input your name: "  name

root

#echo $name

#[ $name != "root"] && echo "name is erro"

##read -p "input your name: "  name

zhangsan

#[

以上是关于《Linux shell变量总结回顾》RHEL6的主要内容,如果未能解决你的问题,请参考以下文章

linux shell 总结

linux shell 总结 (整理)

Linux阶段总结shell脚本

Linux 脚本运维总结之Shell script

Linux基础知识回顾-3

Shell编程规范与变量命令总结