Linux-SHELL脚本学习

1.一个shell中的系统环境变量只对该shell和其子shell有效

  子shell只能继承父shell的属性, 不能更改父shell的属性

  查看shell执行情况可以用sh -x a.sh

2.位置变量和特殊变量

  $$: 这个程序的PID

  $?: 上次命令的执行结果返回值

  $0: 参数情况下表示文件名, 命令下表示当前shell

  $1: 第一个参数

  $*: 返回一个字符串, 所有参数和空格连接起来 "$1 $2 ..."

  $@: 返回多个字符串 "$1" "$2" ...

  $#: 返回参数个数
3.普通变量导为环境变量

  export PATH=$PATH:/usr/local/bin #记住赋值和导出的时候没有$符号

4.读取变量

  read name #参数-t(表示等待多少秒输入)等

5.查看变量

  set命令查看所有已经定义的变量

  env命令查看所有环境变量

6.表达式

  expr: 对整数型变量进行算术运算 #变量与操作符之间必须以空格分开, 变量用$

    expr `expr 2 + 3` / 5

  let: 同expr一样为计算功能, 但与expr相反, 不能用空格分开参数, 变量可以不用$, 但为了统一可以用

    let c=2+3

    let c=a+b

    let c=$a+$b

  $((...)): $(($a - $b))

  $[...]: $[$a - $b]

7.表达式执行

  `cmd`或者$(cmd) #重新开启一个子SHELL去执行

  l=`ls /`; echo $l;

8.测试语句(一般不会单独使用, 会配合if, whie等使用)

  test: 测试范围整数、字符串、文件

  整数:

    test $a -[eq|ne|lt|gt|ge|le] $b;

  字符串:

    test $str1==$str2; test $str1; test -n $str1; test -z $str1; echo $?;

  文件:

    test -[d|f|x|r|w|a|s] file

  以上可以用[]进行简化

    如: test -d $file 等价于 [ -d $file ]

      test [ -d $dir -o -f $file ] #-o表示逻辑或 -a表示逻辑与

9.控制语句

  if语句

 1   if [ -d $file ] ; then

 2 

 3     ...

 4 

 5   elif ...; then

 6 

 7     ...

 8 

 9   else

10 

11     ...

12 

13   fi

  for语句

1 #for 变量名 in 名字列表

2 #do

3 #    ...

4 #done

5 

6 for day in mon tue wed thu fri sat sun

7 do

8     echo $day

9 done

  case语句

 1 #case 变量 in

 2 #    字符串1)

 3 #        ...

 4 #     ;;

 5 #     字符串n)

 6 #         ...

 7 #     ;;

 8 # esac

 9 

10 case $op in

11     c)

12         echo 'c';;

13     d)

14         echo 'd';;

15     *)

16         echo '*'17 esac

  while语句

 1 #while 条件

 2 #do

 3 #    命令

 4 #done

 5  

 6 while [ -d /etc ]

 7 do

 8     ls -ld /etc

 9 done

10 

11 num=1

12 while [ $num -le 10 ]

13 do

14     sum=`expr $num \* $num`

15     echo $sum

16     num=`expr $num + 1`

17 done

  until语句

 1 #until 条件

 2 #do

 3 #    命令

 4 #done

 5 

 6 until [ -x /etc/inittab ]

 7 do

 8     /bin/ls -l /etc/inittab

 9     exit 0

10 done

11 

12 read input

13 until [ "$input" == "Y" ] || [ "$input" == "y" ]

14 do 

15     echo "Error"

16     read input

17 done

break, continue跳出循环

shift指令: 参数左移, 每执行一次, 参数序列顺序依次左移一个位置, $#的值减1; 用于分别处理每个参数, 移出去的参数不可再用;

 1 if [ $# -le 0 ]; then

 2     echo 'Not enough parameters'

 3     exit 0

 4 fi

 5 

 6 sum=0

 7 while [ $# -gt 0 ]

 8 do

 9     sum=`expr $sum + $1`

10     shift

11 done

12 echo $sum

函数的定义

 1 #函数吗() {

 2 #    命令

 3 #}

 4 

 5 #函数的调用不带()

 6 #函数名 参数1 参数2

 7 

 8 #函数中的变量

 9 #变量均为全局, 没有局部变量

10 

11 help() {

12     echo 'abcd'

13 }

14 

15 调用: help

 

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