Shell脚本学习笔记

                                Writen  by  fansky   2016-11-14

最近使用shell编写配置脚本,特将学习过程中shell的常用点记录下来,以备参考 。

  1. shell脚本第一句话 #!/bin/bash #该脚本使用bash进行解析
    注释 “#”号
  2. 从键盘读入数据
    read var
  3. 打印到屏幕
    echo “I love you”
  4. 函数中定义变量
    local variable=10
  5. 函数
    function add()
  6. 数组
    local array=()
    array[1]=10
    array[2]=5
  7. 字符串
    单引号 ‘’ 特殊字符不起作用
    双引号 “” 特殊字符起作用
    反引号 “ 执行命令
    反斜杠 \ 转义字符,且用在双引号中
  8. if条件判断 #if条件判断,条件表达式为0时,为true
    (a)单层条件判断
    if [条件表达式]
    then
    语句
    fi
    (b)多层条件判断1
    if [条件表达式]
    then
    语句
    else
    语句
    fi
    (c) 多层条件判断2
    if [条件表达式]
    then
    语句
    elif [条件表达式]
    then
    语句
    else
    语句
    fi
  9. case多分支判断
    case $变量 in
    “变量一”)
    语句
    ;; #分号不要忘了额
    “变量二”)
    语句
    ;;
    *) #所有其它
    语句
    ;;
  10. 循环
    while [条件表达式] #当形循环
    do
    语句
    done

until [条件表达式] #直到形循环
do
语句
done


for固定循环:
for var in con1 con2 con3
do
语句
done


for数值循环
for((初始值;限制值;执行步长))
do
语句
done
11. 数值运算
var=$((运算内容))
var=`expr i + 1`
12. test条件判断 #等价于 [ 条件表达式 ]
(a)文件类型 test -e filename
-e 该文件名是否存在
-f 该文件名是否存在且为文件
-d 该文件名是否存在且为目录
……
(b)文件权限检测: test -r filename
-r 可读
-w 可写
-x 可执行
……
(c)两个文件比较: test file1 -ne file2
-nt (newer than) 判断file1是否比file2新
-ot (older than) 判断file1是否比file2旧
……
(d)整数比较 test n1 –eq n2
-eq 两个数值相等
-ne 两个数值不等
-gt n1大于n2
-ge n1大于等于n2
……
(e)判断字符串
Test -z string #判断字符串是否为空
Test -n string #判断字符串是否为非空
Test str1 = str2 #判断两个字符串是否相等
Test str1 != str2 #判断两个字符串是否不等
(f)多重条件判定
-a && 两个条件同时成立
-o || 两个条件成立一个
! 取反
13. 判断符号[]
(a)中括号两端用空格隔开
[ -z str1 ]
(b)中括号内的变量,最好用双引号括起来
中括号内的常量,最好用单引号或者双引号括起来
14. shell脚本默认变量 $0 $1 $2……

./config.sh   param1  param2  param3
  $0          $1       $2      $3

即:
$0 脚本名字
$1 第一个参数
$2 第二个参数

$n 第n个参数
$# 参数的个数
$@ 代表“$1”、“$2”、“$3”、“$4”,每个变量式独立的,用双引号括起来
$* 代表“$1c$2c$3c$4”,c为分割字符,默认为空格,本例中代表“$1 $2 $3 $4”
$? 命令执行后的返回状态(0 成功 1 失败)
$$ 当前进程的进程号
$! 后台运行的最后一个进程号
15. 函数的内置变量 $0 $1 $2…… #shell和函数的内置变量不同,各管各的

       myfunc   param1  param2  param3
         $0       $1      $2     $3

就可以了
16. >/dev/null #表示把结果送入垃圾桶
17. command<<\EOF #表示后续的输入作为子shell输入 内容
EOF
18. echo $PATH>/dev/null 2>&1
0标准输入
1标准输出
2标准错误
19. shell脚本调试
sh [-nvx] scripts.sh
-n 不执行脚本,仅检查语法问题
-v 执行脚本前,先将脚本内容输出到屏幕上
-x 将使用到的脚本内容显示到屏幕上,非常非常有用的参数[!!!!!!]
20. shell脚本,结合grep sed awk等工具,非常方便
21. shell脚本执行
bash scripts.sh
./scripts.sh #这两种表示在子shell中运行脚本
source scripts.sh #在当前shell中运行脚本,可以用于导出环境变量

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