1、shell 常用命令及技巧1.变量赋值 a=123 read name b=$(ls /home) 把命令的执行结果赋值给变量 2.使用变量(前面用$ ) echo $a let a=a+1 2.系统变量 $0 这个程序的执行名字$n 这个程序的第 n 个参数值,n=1.9$* 这个程序的所有参数$# 这个程序的参数个数$ 这个程序的 PID$! 执行上一个背景指令的 PID$? 上一个指令的返回值 3.if 语句 if “22“ -lt “33“ 注意空格thenecho “22 less than 33“elseecho “no“fi4.case 语句 #!/bin/bashecho “e
2、nter a number“read anscase $ans in1)echo “you numer is $ans“;2)echo “you number is 2“;3-9)echo “you number is $ans“esac5.比较运算符 运算符 描述 示例 文件比较运算符 -e filename 如果 filename 存在,则为真 -e /var/log/syslog -d filename 如果 filename 为目录,则为真 -d /tmp/mydir -f filename 如果 filename 为常规文件,则为真 -f /usr/bin/grep -L filen
3、ame 如果 filename 为符号链接,则为真 -L /usr/bin/grep -r filename 如果 filename 可读,则为真 -r /var/log/syslog -w filename 如果 filename 可写,则为真 -w /var/mytmp.txt -x filename 如果 filename 可执行,则为真 -L /usr/bin/grep filename1 -nt filename2 如果 filename1 比 filename2 新,则为真 /tmp/install/etc/services -nt /etc/services filename1
4、-ot filename2 如果 filename1 比 filename2 旧,则为真 /boot/bzImage -ot arch/i386/boot/bzImage 字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法) -z string 如果 string 长度为零,则为真 -z “$myvar“ -n string 如果 string 长度非零,则为真 -n “$myvar“ string1 = string2 如果 string1 与 string2 相同,则为真 “$myvar“ = “one two three“ string1 != string2 如果 st
5、ring1 与 string2 不同,则为真 “$myvar“ != “one two three“ 算术比较运算符 num1 -eq num2 等于 3 -eq $mynum num1 -ne num2 不等于 3 -ne $mynum num1 -lt num2 小于 3 -lt $mynum num1 -le num2 小于或等于 3 -le $mynum num1 -gt num2 大于 3 -gt $mynum num1 -ge num2 大于或等于 3 -ge $mynum 6.while 语句 X=1while $x -le 10 doecho hello X is $X let
6、 X=X+1done7.循环方式bash 中的 for 循环有几种方式: 1.for name in word ; do list ; done 2.for ( expr1 ; expr2 ; expr3 ) ; do list ; done/注意有 2 层括号 其中 list 简单说就是一串由操作符(operator ;、 i10,那么数字字符可从 0-9 和 A-Z. 在表达式中支持的操作符及其含义为: +,-,*,/,% 加,减,乘,除,取模 ,=,=,&=,=,|= 表达式式中也可以使用括号.括号或运算优先级的定义与一般计算机语言中的 相同. let 命令具有返回值.当计算结果(若有多
7、个表达式时,以最后一个为准)为 0 时, 返回值为 1,否则为 0. 当表达式中含有 shell 的特殊字符(如|)时,需要用引用符(或“)将其引用起来. 使用 let 时还需要注意的时,对于 let x+y 这样的式子,shell 虽然计算了 x+y 的值 但却将结果丢弃,若不想这样,可以使用 let sum=x+y 将 x+y 的结果保存在变量 sum 中 另外还可以使用(和)操作符取代 let 命令,而且这样的话,还可以省去对算术 表达式的引用,如果想返回表达式的值,则需用$()的格式。10.set 命令使用 set 命令可以设置各种 shell 选项或者列出 shell 变量.单个选项
8、设置常用的特性. 在某些选项之后-o 参数将特殊特性打开.在某些选项之后使用+o 参数将关闭某些特性, 不带任何参数的 set 命令将显示 shell 的全部变量.除非遇到非法的选项,否则 set 总是 返回 ture. 当 BASH shell 被调用时,可以列出全部的选项.当前的选项集列在$-中.在 option 参数 被处理后,其他的参数被赋值到位置参数中($1,$2,.,$n) set -abefhkmnptuvxldCHP -o option name arguments . 源码: 选项 说明 -a 自动向已经修改的变量或为导出后序命令的变量作出标志 -b 不是在原提示符之前,而是
9、立即引发终止后台任务的状态表表 -e 如果命令带非零值返回,立即退出 -f 禁止带扩展名的路径 -h 定义函数时,定位和存储函数命令,当函数被执行时,通常查询 函数命令 -k 所有的关键词参数,而不只是那些命令名前的关键词参数,被放 在环境命令中 -m 监视器模式,启动任务控制.此选项默认支持系统 shell 交互.后 台进程以单独的进程组运行,在每次完成任务时显示包含退出的 状态行 -n 读取命令但不执行命令.通常监查 shell 脚本的句法错误.交互 shell 被忽略 -o option-name 选项名可以是下列之一: 选项 说明 allexport 同-a 选项 braceexpan
10、d shell 执行花括号扩展,在默认情况下起作用 emacs 使用 emacs 风格命令行编辑接口.除非 shell 以-noline-editing 选项启动,否则当 shell 交互时,通过默认启动该选项 errexit 同-e 选项 histexpand 同-H 选项 ignoreeof 其结果是好像 shell 命令 IGNOREEOF=10 被执行 interactive 允许单词前带#号,以使得在交互 shell 中忽略命令行的全部字符 -commands monitor 同-m 选项 noclobber 同-C 选项 noexec 同-n 选项 noglob 同-f 选项 no
11、hash 同-d 选项 notify 同-b 选项 nounset 同-u 选项 physical 同-p 选项 posix 改变 BASH 属性以匹配标准,默认操作不同于 POSIX1003.2 标准 verbose 同-v 选项 vi 使用 vi 风格的命令行编辑器 XTRACE 同-x 选项,如果没有给出选项名,显示当前选项值 -p 打开特权模式(在此模式,$ENV 文件被处理,不能从环境中继承 shell 函数.如果是有效用户 ID 而不是实用户组则自动启动.关闭 此选项将使得有效用户和组 IDs 设置实用户和组 IDs) -t 在读取命令并执行之后退出 -u 当执行参数括展时,把非设
12、置变量作为错误处理(如果扩展企图 出现在非设置变量中,shell 显示错误信息.如果不是交互式,则 带非凌值退出) -v 输入行被读取时,显示 shell 输入行 -x 在每个简单命令被扩展之后,显示 PS4 扩展值,之后是要执行的命令 -l 保存和恢复绑定在命令中的名称 -d 禁止执行查找散列命令(通常,命令被保存在散列表中,一旦被找到 就不再继续查找) -C 效果好像是执行了 noclobber=shell 命令 -H 使用!风格的历史替代(当 shell 交互时,在默认情况下,此选项有效) -P 如果设置此参数,当执行改变目录命令 cd 时,不遵循符号链接,而是 使用实际的目录 - 如果
13、在选项后没有参数,不设置位置参数.否则,即使一些参数以 a 选项开始,也要把位置参数设置为 argument - 结束选项的信号,将引发其余的参数被赋值到位置参数中(-x 和-v 选项被关闭.如果没有 argument,位置参数将保留未改变的参数)11.函数函数的使用 BASH 是一个相对简单的脚本语言,不过为了方便结构化的设计,BASH 中也提供了函数定义的功能。BASH 中的函数定义很简单,只要向下面这样写就可以了: function my_funcname code block 或者 my_funcname() code block 上面的第二种写法更接近于 C 语言中的写法。BASH
14、中要求函数的定义必须在函数使用之前,这是和 C 语言用头文件说明函数方法的不同。 更进一步的问题是如何给函数传递参数和获得返回值。BASH 中函数参数的定义并不需要在函数定义处就制定,而只需要在函数被调用时用 BASH的保留变量 $1 $2 . 来引用就可以了;BASH 的返回值可以用 return 语句来指定返回一个特定的整数,如果没有 return 语句显式的返回一个返回值,则返回值就是该函数最后一条语句执行的结果(一般为 0,如果执行失败返回错误码)。函数的返回值在调用该函数的程序体中通过$? 保留字来获得。下面我们就来看一个用函数来计算整数平方的例子: #!/bin/bash square() let “res = $1 * $1“ return $res square $1 result=$? echo $result exit 0