《Linux shell变量总结回顾》RHEL6(转)

文章版权:http://www.cnblogs.com/linux-super-meng/

环境变量路径:

[root@localhost ~]# set   //查看到的是局部变量和全局变量2

[root@localhost ~]# env  //查看系统的全局环境变量

[root@localhost ~]# echo $PATH  //查看系统环境变量路径

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

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

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

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

[root@localhost ~]# source .bash_profile  

[root@localhost ~]# ls –a    可以查看到这2个文件

 

脚本的执行:

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

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

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

                       

区分局部变量和全局变量

[root@localhost ~]# str=1000   //局部变量

 

[root@localhost ~]# echo $str

1000

去编辑一个脚本:

# vim bianliang.sh

#!/bin/bash

echo $str

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

 

[root@localhost ~]# export str   //添加到全局变量中

[root@localhost ~]# bianliang.sh   //再次使用完全ok

1000

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

# unset str  清除全局变量

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

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

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

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

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

[root@localhost ~]# [ -f /etc/grub.conf ] && echo yes  || echo no 

Yes        

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

[root@localhost shellscripts]# [ -x /shellscripts/hello.sh ] && echo yes || chmod +x /shellscripts/hello.sh

[root@localhost shellscripts]# ls

hello.sh  ipadd.sh  logmess_clean.sh 

[root@localhost shellscripts]# hello.sh

hello world!   

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

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

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

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

[root@localhost ~]# echo "$PWD is lujing"

/root is lujing

[root@localhost ~]# echo '$PWD is lujing'

$PWD is lujing

[root@localhost ~]# echo $a

1000

[root@localhost ~]# echo $aaaaaaaa  //系统把$aaaaa视为一个变量

 

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

1000aaaaaa

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

 

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

test命令

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

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

 

 ≡ 常见的测试类型

      测试文件的状态

      字符的串比较

      整数值比较

      逻辑测试

 

测试文件的状态

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

  常见的测试操作符

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

 

[root@localhost /]# [ -d /var/spool/ ]

[root@localhost /]# echo $?

0

 

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

 

[root@localhost /]# [ -e /etc/passwd ]

[root@localhost /]# echo $?

0

 

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

 

[root@localhost Packages]# [ -f /etc/passwd ]

[root@localhost Packages]# echo $?

0

[root@localhost Packages]#

 

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

 

[root@localhost /]# [ -r /etc/shadow ]

[root@localhost /]# echo $?

0

[root@localhost /]#

 

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

 

[root@localhost /]# [ -w /etc/shadow ]

[root@localhost /]# echo $?

0

[root@localhost /]#

 

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

 

[root@localhost /]# [ -x /etc/shadow ]

[root@localhost /]# echo $?

1

[root@localhost /]# ll /etc/shadow

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

 

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

 

 

[root@localhost /]# ll /etc/shadow

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

[root@localhost /]# [ -L /etc/shadow ]

[root@localhost /]# echo $?

1

整数值比较

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

常用的操作测试符

  -eq:等于(Equal

  -ne:不等于(Not Equal

  -gt:大于(Greater Than

  -lt:小于(Lesser Than

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

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

案例

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

 

[root@localhost 桌面]# who|wc -l

2

[root@localhost 桌面]# [ `who|wc -l` -le 10 ] && echo "YES"

YES

 

变量的加减法运算:

变量的加法运算:

[root@localhost ~]# a=1000

[root@localhost ~]# echo $a

1000

[root@localhost ~]# expr $a + $a

2000

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

1000 + 1000

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

1000+1000

变量的乘法运算:

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

expr: syntax error

[root@localhost ~]# expr $a \* $a

1000000

[root@localhost ~]# expr 2 / 1      //除法

2

[root@localhost ~]# expr 2 – 1        //减法

1

[root@localhost ~]# expr 2 % 1                //取余

0

位置变量:

0-9           常用的为1-9

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

[root@localhost shellscripts]# cat a.sh

#!/bin/bash

echo $1

echo $2

echo $3

echo $0

[root@localhost shellscripts]# a.sh a b c d e

a

b

c

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

 

[root@localhost shellscripts]# a.sh 1 2

3

[root@localhost shellscripts]# a.sh 2 3

5

[root@localhost shellscripts]# cat a.sh

#!/bin/bash

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

[root@localhost 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!"            //后面的才是脚本的内容

 

文章版权:http://www.cnblogs.com/linux-super-meng/

 

字符串比较

 格式 [ 字符串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

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

#echo $name

文章版权:http://www.cnblogs.com/linux-super-meng/

 

逻辑测试

   格式:[表达式1]   操作符  [表达式2]

  常用的测试操作符

   -a &&:逻辑与,“而且”的意思

  #前后两个表达式都成立是整个测试结果才为真,否则为假

   (前面真则执行后面)

   -o||:逻辑或,或者的意思

   #操作符两边至少一个为真时,结果为真,否则结果为假

    (前面假则执行后面)

   !:逻辑否

  #当指定条件不成立时,返回结果为真

 

     if条件语句   --单分支

当“条件成立“时执行相应的操作

         if  条件测试命令               if 磁盘已用空间>80%

                 then 命令序列   ==      then 报警

           fi             

应用案例:

  如果/boot分区的空间使用超过80%,输出报警信息

  #!/bin/bash

 RATE=`df |awk'NR==4{print int($5)}'`

 if [$RATE -gt 80]

  then

  echo "warning,DISK is full!"

  if

 

 

                 if条件语句--双分支

当“条件成立”、“条件不成立”时执行不同的操作

 

if 条件测试命令                if 3306端口是否在监听状态

 then 命令序列1         ==      then mysqld 服务已运行

 else 命令序列2                    else 启动mysqld服务

fi                   

 

引用案例:

判断vsftp是否在运行。若已运行则输出提示信息,否则重新启动vsftp服务

#!/bin/bash

service vsftp status &>/dev/null

 if [ $? -eq 0 ]

then

 echo "vsftp service is running"

 else

  /etc/init.d/vsftp restart

 fi

 

如果/boot分区的空间使用超过80%,输出警报信息。我们来写个脚本

 

#vi a.sh

#!/bin/bash

#a.sh

NUM=`df | awk 'NR==5{print int($5)}'`

if

[ $NUM -gt 80 ]

then

 echo "Warning,DISK is full!"

if

 

awk的额外扩展

 

[root@localhost ~]# cat /etc/passwd | grep bash | awk -F: '{print ($1)}'

root

lenovo

[root@localhost ~]# ^C

文章版权:http://www.cnblogs.com/linux-super-meng/

 

for循环语句                            for  收件人  in 邮件地址列表

根据变量的不通值,重复执行一组命令操作   ==                do

for 变量名  in 取值列表                       发邮件    

do                                        done

命令序列

done

 

#!/bin/bash

for TM in a b c d e

do

echo $TM

sleep 1

done

~                                                                                                                                                                 

重复测试指定的条件,只要条件成立则反复执行对应的命令操作

 

while 命令或表达式          while 可用内存<100mb

do             ==do

     命令列表      获取可用内存数

done                    done

文章版权:http://www.cnblogs.com/linux-super-meng/

 

多重分支语句

root@localhost ~]# cat a.sh

#!/bin/bash

#a.sh

case $1 in

start)

      echo "start...."

           ;;

stop)

      echo "stop......"

      ;;

restart)

      echo "restart........"

      ;;

laod)

     echo "laod......."

      ;;

status)

      echo "start....."

      echo "stop......"

      ;;

esac

 

[root@localhost ~]# ./a.sh start

start....

[root@localhost ~]# ./a.sh stop

stop......

[root@localhost ~]#

[root@localhost ~]# cat a.sh

#!/bin/bash

#a.sh

read -p "input:" NUM

case "$NUM" in

[a-z]|[A-Z])

      echo "it is english"

      ;;

[0-9])

      echo "it is shuzi"

      ;;

*)

      echo "........."

      ;;

esac

[root@localhost ~]#

 

[root@localhost ~]# ./a.sh

input:2

it is shuzi

[root@localhost ~]# ./a.sh

input:a

it is english

[root@localhost ~]# ./a.sh @

input:@

.........

[root@localhost ~]# ./a.sh

input:#

.........

[root@localhost ~]#

 

      shift迁移语句

用于迁移位置变量,将$1~$9依次向左传递

 

[root@localhost ~]# ./a.sh 10 20

The sum is: 30

[root@localhost ~]# cat a.sh

#!/bin/bash

#a.sh

Result=0

while [ $# -gt 0 ]

      do

Result=`expr $Result + $1`

      shift

      done

      echo "The sum is: $Result"

[root@localhost ~]#

 

 

break语句

 

用于跳出当前的循环体,执行循环体后的语句。

 

函数的应用

 

[root@localhost ~]# ./c.sh

46

55

[root@localhost ~]# cat c.sh

#!/bin/bash

#c.sh

adder(){

echo `expr $1 + $2`

}

 

adder 12 34

adder 22 33

[root@localhost ~]# ./c.sh

46

55

[root@localhost ~]#

 

 

声明:以上知识全来自与自学shell编程总结回顾

时间: 2024-11-08 20:21:52

《Linux shell变量总结回顾》RHEL6(转)的相关文章

python文件读写操作与linux shell变量命令交互执行的方法_python

本文实例讲述了python文件读写操作与linux shell变量命令交互执行的方法.分享给大家供大家参考.具体如下: python对文件的读写还是挺方便的,与linux shell的交互变量需要转换一下才能用,这比较头疼. 代码如下: 复制代码 代码如下: #coding=utf-8 #!/usr/bin/python import os import time #python执行linux命令 os.system(':>./aa.py') #人机交互输入 S = raw_input("

Linux中Shell变量详解

Shell变量分为环境变量和自定义变量,这两则的差异在于该变量能否被子进程使用,看下面的一个示 意图: 如果是环境变量,子进程中还可以继续使用,但如果是自定义的变量,子进程里将失效. 用env查看环境变量 常见的环境变量如下: 1)HOME:用户的主目录(cd ~) 2)SHELL:用户的默认shell 3)HISTSIZE:历史记录条数 4)MAIL:邮件信箱文件 5)PATH:执行文件查找路径 6)LANG:语系 用set查看环境变量和自定义变量 比较重要的自定义变量有: 1)PS1:提示符

Linux Shell脚本系列教程(三):变量和环境变量

  这篇文章主要介绍了Linux Shell脚本系列教程(三):变量和环境变量,本文讲解了普通变量.获取字符串的长度.环境变量等内容,需要的朋友可以参考下 一.玩转变量和环境变量 变量是任何一种编程语言都必不可少的组成部分,用于存放各种类型的变量.脚本语言大多是弱类型语言(动态语言),也就是说在使用变量时,不需要事先声明变量的类型,只需要直接赋值就可以.在Bash中,每一个变量的值都是字符串.无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储.有一些特殊的变量会被shell环境和操作系统

Linux Shell脚本系列教程(四):使用函数添加环境变量

  这篇文章主要介绍了Linux Shell脚本系列教程(四):使用函数添加环境变量,本文对环境变量的一知识作了介绍,并给出普通添加环境变量和使用函数添加环境变量的方法,需要的朋友可以参考下 一.简介 环境变量通常用于存储路径列表,这些路径用于搜索可执行文件.库文件等.例如:$PATH.$LD_LIBRARY_PATH,它们通常看起来像这样: 代码如下: PATH=/usr/bin;bin LD_LIBRARY_PATH=/usr/lib;lib 这意味着只要shell需要运行二进制可执行文件时

linux shell脚本 两个变量中间有一个/ 一起输出时前面的变量出不来

问题描述 linux shell脚本 两个变量中间有一个/ 一起输出时前面的变量出不来 配置文件config.txt 内容为: abc=/home/test 计划在shell脚本中获取等号后面的路径,shell脚本如下; #!/bin/bash var=`grep abc /home/test/config.txt` #获取abc开头的一行 echo $var put_path=${put_line##*=} #截取等号后面路径 echo "${put_path}/1.txt" 可以获

linux shell sed awk-linux shell替换(通过变量修改文档值)

问题描述 linux shell替换(通过变量修改文档值) 现有变量VAR= 1, 2,3,4为一个数组,去依次修改文档 例如: 1 2 3 4 5 6 7 8 9 中第二行第三列的数值,得到4个文档分别为: 1 2 3 1 2 3 1 2 3 1 2 3 4 5 1 4 5 2 4 5 3 4 5 4 7 8 9 7 8 9 7 8 9 7 8 9 该怎么用脚本实现?请大神指教 解决方案 这种用python脚本来做更容易点.

linux shell 自定义函数方法(定义、返回值、变量作用域)_linux shell

一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带function fun() 定义,也可以直接fun() 定义,不带任何参数. 2.参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值. return后跟数值n(0-255 实例(testfun1.sh): #!/bin/sh fSum 3 2; function fSum

linux中shell变量$#,$@,$0,$1,$2的含义解释

比如脚本名称叫start.sh 输入参数三个: 1 2 3 运行test.sh 1 2 3后 $*为"1 2 3"(一起被引号包住) $@为"1" "2" "3"(分别被包住) $#为3(参数数量) linux中shell变量$#,$@,$0,$1,$2的含义解释:  变量说明:  $$  Shell本身的PID(ProcessID)  $!  Shell最后运行的后台Process的PID  $?  最后运行的命令的结束代码

linux shell自定义函数(定义、返回值、变量作用域)介绍_linux shell

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带function fun() 定义,也可以直接fun() 定义,不带任何参数. 2.参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值. retu