标签归档:shell

shell脚本变量学习小记

转载自:http://blog.csdn.net/love__coder/article/details/6744332
1、查看所有的shell变量

set

2、查看所有的只读shell变量

readonly

3、变量设置值

格式:var_name=var_value

注意:=连接变量名和变量值,=两侧不能有空格;当值var_value含空格时,需要双引号把var_value包起来

4、输出变量值

echo $var_name

echo ${var_name}

5、变量值连接

echo $var_name1$var_name2

注意: 两个变量之间没有空格

6、查看所有环境变量

env

7、给环境变量设置值

VAR_NAME=VALUE

export VAR_NAME

8、清除变量

unset var_name

9、导出变量到子脚本中

父脚本中定义好变量,然后 export var_name

子脚本中可以使用该变量. $var_name或${var_name}

10、显示脚本执行状态

执行完脚步,输入 echo $?

注意:0,表示成功

11、脚本运行的当前进程id
$$

12、传递给shell脚本的参数个数
$#

13、反引号`

设置系统的命令输出到变量

echo “shell file name is :`basename $0` ”

14、以串行形式,打印当前整个目录

echo *

15、替换运算符

    • 1) ${var_name:-def_Val}如果变量var_name存在且为非null,返回该变量的值,否则返回默认值def_Val注意var_name与:之间没有空格,:与-之间可以有空格。主要用途,如果变量未定义,则用默认值.
    • 2) ${var_name:=val}如果变量var_name存在且为非null,返回该变量的值,否则,把val的值赋给变量var_name,并返回var_name的值val注意var_name与:之间没有空格,:与=之间也不能有空格。
    • 3)${var_name:?message},如果变量var_name存在且为非null,返回该变量的值,否则返回该变量的名字var_name:提示信息meesage,并退出当前命令或脚本注意var_name与:之间没有空格,:与?之间也不能有空格。
    • 4) ${var_name:+val}如果变量var_name存在且为非null,返回val,否则返回null注意var_name与:之间没有空格,:与+之间也不能有空格。

15、返回变量长度

${#val_name}

16、显示所有命令行参数

$* 或 $@

17、算术运算操作 $(())

$((var1 opr var2))

只能是+-*/ 和()运算符,并且只能做整数运算

例如: $((5+1))

18、命令代换$()

类似于 反引号`

例如:echo $(date)

shell脚本比较运算符及逻辑运算符小结

1、数值

格式:

test “num1” opr “num2”

[ “num1” opr “num2” ]

opr 取值:

  • 相等:-eq
  • 不等:-ne
  • 大于:-gt
  • 小于:-lt 【l是字母L的小写】
  • 小于等于:-le
  • 大于等于:-ge

2、字符串

格式:

[ str1 opr str2]

[ opr str ]

opr取值:

  • 相等:=
  • 不等:!=
  • 空串:-z
  • 非空串:-n

3、文件

格式:

[ opr file ]

opr取值:

  • 目录: -d
  • 文件: -f
  • 链接: -L
  • 可读: -r
  • 可写: -w
  • 可执行: -x
  • 文件非空: -s

4、逻辑运算符

  • 逻辑与: -a 格式: [ condition1 -a condition2 ]
  • 逻辑或: -o 格式: [ condition1 -o condition2 ]
  • 逻辑否: ! 格式: [ ! condition ]

注意:[ 与condition 之间必须有空格,condition与] 之间也必须有空格

注意: -a -o 用在一个[]中间连接多个条件,而 && || 则用在多个[]之间,连接多个[]条件

非法: [ condition1 && condition2 ]

bash中常用的几个特殊变量

$* 获得传入脚本的参数列表

$@ 获得传入脚本的参数列表

$# 传入参数的个数

$$ 当前脚本的进程ID

$!  最近在后台执行的进程ID

$?  最近执行命令的返回状态

$- 显示shell使用的当前选项,与set命令功能相同

$_前一条命令的最后一个参数

总结自:http://www.thegeekstuff.com/2010/05/bash-shell-special-parameters/

“sudo !!”想说爱你不容易

“sudo !!”命令用了有一段时间了,有时候还是能带来很多便利的,but今天才发现这个命令有多危险。

正常情况下”sudo !!”的作用是执行上一条命令, “!!”就是引用的上一条命令。

但是今天不小心敲成了”sudo !1″,可怕的是history中第一条命令是sudo reboot(要是halt之类的更悲剧)。

一般来说撞这种狗屎运的概率很小,但是···

所以以后尽量不用”sudo !!”了,一定要用也要加倍小心了···

推荐阅读:15 Linux Bash History Expansion Examples You Should Know

Linux进程相关命令整理

君欲善其事,必先利其器!

1)&
这个用在一个命令的最后,可以把这个命令放到后台执行

2)ctrl + z
可以将一个正在前台执行的命令放到后台,并且暂停

3)jobs
查看当前有多少在后台运行的命令

4)fg
将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

5)bg
将一个在后台暂停的命令,变成继续执行
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

6)ctrl+c
终止前台进程

7)ps
查看进程信息

8)kill
kill 管理后台的任务.

9)nohup
用它在后台运行一个命令,即使在用户退出时也不受影响