lin x shell笔记
no.015 引号 1. 双引号("") 其中引用的变量会替换为变量值。比如: [wangyb@localhost bash]$ str="hello world" [wangyb@localhost bash]$ echo "$str" hello world 2. 单引号( ) 忽略变量和其他特殊字符,单引号内任何内容都当成字符串显示。比如: [wangyb@localhost bash]$ str="hello world" [wangyb@localhost bash]$ echo $str $str 3. 单引号和双引号同时使用时,谁在外面谁起作用。比如 [wangyb@localhost bash]$ echo " $str " hello world [wangyb@localhost bash]$ echo "$str" "$str" 4. 反引号(ˋˋ) 反引号中的内容被当做命令来执行。比如 [wangyb@localhost bash]$ var=ˋdateˋ [wangyb@localhos bash]$ echo $var th dec 22 22:08:07 jst 2011 5. 转义符 no.016 shell脚本介绍 1. 脚本的第一行一般以 #！binbash 开始 2. 给脚本加入执行权限后就可以运行脚本了 #no.017 条件测试 1. 测试语法 test condition 或者 [ condition ] 使用方括号是注意在condition两边加上空格 2. 文件状态测试 -d 目录 -s 文件长度大于0 -f 正规文件 -w 可写 -l 符号连接 - 文件有s id位设置 -r 可读 -x 可执行 例子如下:测试是否为目录,也可以用 test -d  来代替方括号 [root@localhost bash]# [ -d  ] [root@localhost bash]# echo $？ 1 [root@localhost bash]# [ -d . ] [root@localhost bash]# echo $？ 0 3. 逻辑与 -a 逻辑或 -o 逻辑否 ！ 例子如下: [root@localhost bash]# [ -d  -a -d . ] [root@localhost bash]# echo $？ 1 [root@localhost bash]# [ -d  -o -d . ] [root@localhost bash]# echo $？ 0 [root@localhost bash]# [ ！ -d  -a -d . ] [root@localhost bash]# echo $？ 0 [root@localhost bash]# [ ！ -d  -a ！ -d . ] [root@localhost bash]# echo $？ 1 4. 字符串测试 [ string1 string_operator string2 ] 或者 [ string_operator string ] string_operator可为:= 两个字符串相等 ！= 两个字符串不等 -z 空串 -n 非空串 5. 数值测试 [ "n mber1" n m_operator "n mber2" ] n m_operator可为: -eq 数值相等 -ne 数值不等 -gt n mber1  n mber2 -lt n mber1  n mber2 -le n mber1 = n mber2 -ge n mber1 = n mber2 例子: [root@localhost bash]# [ "100" -gt "101" ] [root@localhost bash]# echo $？ 1 [root@localhost bash]# [ "100" -lt "101" ] [root@localhost bash]# echo $？ 0 6. expr语法 expr arg1 operator arg2 例子:变量自增 [root@localhost bash]# count=1 [root@localhost bash]# echo $count 1 [root@localhost bash]# count=ˋexpr $count + 1ˋ [root@localhost bash]# echo $count 2 no.018 控制流结构 1. if语句格式 if 条件1 then 执行命令1 elif 条件2 then 执行命令2 else 执行命令3 fi 2. case语句格式 case 值 in 模式1) 命令1 ；； 模式2) 命令2 ；； ...... easc 其中的"模式"可以是 *(任意字符), ？(任意单字符), [..](范围内任意字符) "模式"中还可以是使用 | (比如 str1|str2 表示str1和str2都可以) 3. for语句格式 for 变量名 in 列表 do 命令1 命令2 ...... done 4. ntil语句格式 ntil 条件 命令1 ...... done 一直执行至条件为真时才结束,至少执行一次 5. while语句格式 while 条件 命令1 ...... done 6. 利用ifs来改变读取内容的分隔符 7. 利用break和contin e控制循环的执行 no.019 shell函数 1. shell函数格式 函数名  { 命令1 ...... } 或者 f nction 函数名  { 命令1 ...... } 2. 引用其他脚本中函数 . pathnamef ncfile (点空格斜线文件完整路径名或者点空格文件相对路径名) 3. 函数中通过 $1, $2.....$9来获取参数 no.020 向脚本传递参数 1. 使用shift依次获取各个参数,比如 while [ $# -ne 0 ] do echo $1 # 通过shift,$1将依次表示各个参数 shift done 2. getopts语法格式 getopts operation-string variable。 no.021 屏幕输出 1. tp t 控制屏幕上的字符输出,比如加粗字符,隐藏光标等等 2. 改变字符颜色的方法,比如 echo "ctrl-vescape[40；32m" 设置背景黑色(40), 字符绿色(32) no.022 屏幕输入 1. 输入时进行validation check "送进的是垃圾,出来的肯定是垃圾" no.023 调试脚本 1. shell不会对错误进行精确定位,当shell打印错误后,需要观察报错的整个代码段 2. 在脚本中利用set命令辅助调试 set -n 读命令但不执行 set -v 显示读取的所有行 set -x 显示所有命令及参数 - 表示打开； + 表示关闭；set +x 表示关闭显示所有命令及参数 no.024 shell 嵌入命令 1. set 命令在脚本中设置脚本的运行参数 2. times命令打印shell消耗时间和运行命令消耗时间 ？？？ 3. type 命令查询命令是否有效及命令类型 4. limit 命令设置运行在shell上的显示限制 5. wait 命令是父进程等待子进程完成 no.025 深入讨论 1. 创建文本 ex. cat  file end  (输入内容)  end (输入内容)将被追加到file中 no.026 shell工具 1. 用日期做文件名,ex. $ myfile=ˋdate +%y%m%d%h%m%sˋ $ to ch $myfile 2. 脚本中的临时文件名中加入进程号,可以保证文件名唯一,并在脚本结束时删掉文件 ex. tmpfile1=tmptempfile1.$$ tmpfile2=tmptempfile2.$$ rm tmp*.$$ 3. 常用信号 信号 信号名 含义 1 sighup 挂起或父进程被杀死 2 sigint 来自键盘的中断信号,通常是ctrl-c 3 sigquit 从键盘退出 9 sigkill 无条件终止 11 sigsegv 段(内存)冲突 15 sigterm 软件终止(缺省杀进程信号) 4. trap 捕获信号 语法 trap "do-something" signal(s) ex. trap "" 2 3 忽略信号2和信号3,用户不能终止该脚本 trap "commands" 2 3 如果捕捉到信号2和信号3,就执行相应的commands trap 2 3 复位信号2和3,用户可以终止该脚本 5. eval 对变量进行2次扫描 比如: [wangyb@localhost bash]$ var1="cat " [wangyb@localhost bash]$ echo $var1 cat  [wangyb@localhost bash]$ eval echo $var1 cat  [wangyb@localhost bash]$ eval $var1 #！binbash tmp= hello sleep 2 times 6. 获取命令行的最后一个参数: ex. $(eval echo $$#) 7. logger 命令记录日志 no.027 几个脚本例子 # 作者常用的几个脚本 no.028 运行级别脚本 1. 确定当前的运行级别:who -r 2. 运行级别含义 运行级别0 启动和停止整个系统 运行级别1 单用户或管理模式 运行级别2 多用户模式；部分网络服务被启动。 运行级别3 正常操作运行模式,启动所有的网络服务 运行级别4 用户定义的模式,可以使用该级别来定制所需要运行的服务 运行级别5 有些unix操作系统变体叫起作为缺省x-windows模式 运行级别6 重启动 no.029 cgi脚本 # 感觉现在应该不会有人用bash来开发web程序了吧 no.030 常用shell命令 1. basename : basename path 2. cat : cat optiones file -v 显示控制字符 3. compress : compress options files -v 显示压缩结果 4. cp : cp options file1 file2 -i 覆盖文件之前提示用户确认 -p 保留权限模式和更改时间 -r 拷贝相应的目录及其子目录 5. diff : diff options file1 file2 -c 按照标准个数输出 -i 忽略大小写 6. dircmp : dircmp options directory1 directory2 -s 不显示相同的文件 7. dirname : dirname pathname 8. d : d options directory -a 显示每个文件的大小,不仅是整个目录所占用的空间 -s 只显示总计 9. file : file filename 10. f ser : f ser options file -k 杀死所有访问该文件或文件系统的进程 - 显示访问该文件或文件系统的进程 11. head : head -n mber files 12. logname : logname (显示当前使用的登陆用户名) 13. mkdir : mkdir options directory -m 在创建目录时按照该选项的值设置访问权限 14. more : more options files -c 不滚屏,而是通过覆盖来换页 -d 在分页处显示提示 -n 每屏显示n行 15. nl : nl options file -i 行号每次增加n；