shell脚本学习笔记(一)—— shell基础及sed

  shell既是一种命令语言,又是一种程序设计语言,有变量、函数,流程控制等。shell脚本本身是基于高层的开发,所以不宜做底层的编程,但是在高层做一些系统应用的配置和管理,恰到好处。

1 学习shell脚本好的资料

  • 网上资料
      可以看看知乎上的,学习shell有什么好书推荐?
      shell脚本学习材料,http://mingxinglai.com/cn/2013/12/material-of-shell/
      《shell十三问》,http://blog.csdn.net/chinalinuxzend/article/details/1826623

  • 书籍
      传说中的ABS(《shell脚本高级编程》)网上翻译版的没看下去,英文版在这里:http://tldp.org/LDP/abs/html/
      《Linux Shell脚本攻略》,只有200多页,cookbook类的书,很实用,也适宜入门。
      《shell脚本学习指南》有中文版的书出版,好像还不错。

2 查看系统使用的shell

查看系统支持哪些shell:
  cat -n /etc/shells

查看系统默认的shell:
  echo $SHELL
  env | grep SHELL

查看当前的shell:
  ps
输入一条不存在的命令,查看出错的shell提示

shell脚本中只能用#来注释。

3 shell脚本名

shell脚本文件有无后缀和后缀名是什么并不影响脚本的执行,只是用.sh,见名知意。
file filename这个命令可以辨别文件的类型。

4shell脚本的执行与停止

4.1 shell脚本的执行

1、给脚本添加可执行权限,以相对路径或者绝对路径找到脚本,然后执行。
2、sh XXX.sh或者bash xxx.sh,不需要脚本有可执行权限。
3、. xxx.sh或者source xxx.sh,也不需要脚本有可执行权限。
sh –help可以查看sh命令的一些选项,-n或-x选项比较有用。

让脚本或者进程后台执行,即使关掉了终端也还会继续运行:
nohup BatchMain > /dev/null &

4.2 shell脚本的停止

1、return会退出脚本,不会关闭终端。
注意:return命令不能直接用在脚本的主程序中。但当用source a1.sh(或者. a1.sh)执行脚本的时候,可以用在脚本中。
2、exit会退出脚本的执行,并且会关闭当前的终端。

5 shell脚本的参数

$# 传递给脚本或函数的参数个数。
$1 $2 运行脚本时传递给脚本的参数称为命令行参数。命令行参数用 $n 表示,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推。
$? 上个命令的退出状态,或函数的返回值。

6 变量赋值和if判断条件注意点

shell脚本中给变量赋值的“=”两边不能有空格。
有时我们想要在说明一个变量并对它设定为一个特定值后就不改变它的值,这可以用下面的命令来保证一个变量的只读性:
  readly 变量名
if选择判断结构中判断条件所在的中括号里面的内容要左右间隔一个空格。

7 shell算术运算

#!/bin/sh
i=4
j=5
sum1=`expr $i + $j`
sum2=$(($i + $j ))
((sum3=i +j ))
echo "$sum1 $sum2 $sum3"

以上脚本可以验证`expr $i + $j`和$(($i + $j))的结果都是一样的,都是求i和j的和。

8 sed编辑

sed一次执行多个命令的方式有3种:
1、在命令间用;分割。
2、使用-e选项连接多个命令。
3、在shell脚本中可以使用换行把多个命令区分。

获取某个进程的PID:

ps -e | sed '/'$1'/!d;s/^*\([0-9]*\).* \(.*\)$/\1 \2/;/'$1'/!d;s/ .*$//'
ps -e | sed -e '/'$1'/!d' -e 's/^*\([0-9]*\).* \(.*\)$/\1 \2/' -e '/'$1'/!d' -e 's/ .*$//'

$1为执行脚本时给的第一个参数。

sed的详细使用,见博客——流编辑器sed:
http://www.cnblogs.com/mchina/archive/2012/06/30/2570523.html

你可能感兴趣的:(shell脚本)