linuxshell 读书笔记四 (unix shell 第三版)

read variable         --读入标准输入的一行数据给variable 如果后个多个变量 
                 --变量1存1串 变量2存2串 以存此类推 如果变量少,则最后一个变量存多个串值
                                                           --字符间以空白分隔
[yp@localhost ~]$ read test
1 2 3
[yp@localhost ~]$ echo $test
1 2 3

[yp@localhost ~]$ read test test1 test2
1 2 3
[yp@localhost ~]$ echo $test
1
[yp@localhost ~]$ echo $test2
3

[yp@localhost ~]$ echo "$test","$test2","$test1" ;
111,333,222
[yp@localhost ~]$ echo "$test,$test2,$test1" ;
111,333,222

[yp@localhost ~]$ read test  test1
123  34  56  321   444  55
[yp@localhost ~]$ echo "$test1 ,test"
34  56  321   444  55 ,123

--用read 试着模仿cp 的 -i功能 如果目标文件存在则提示是否覆盖它
[xep@localhost ~]$ cat -n read_cpfile_script
     1  #! /bin/bash
     2  #  use read command to finished copy file
     3
     4  if [ $# -ne 2 ]
     5  then
     6     echo "please input sou_file_name and dest_file_name"
     7     exit 1
     8  fi
     9
    10  if [ -e $2  ]
    11  then
    12      echo -e "the dest_file $2 exists do you cover it? (y/n) \c"
    13      read sure
    14  fi
    15
    16  if [ "$sure" = 'y' ]
    17  then
    18      cp $1 $2
    19  fi
    20  exit 0

--上面脚本中用到转义符 可以把转义符\c去掉 试试效果
--记录转义符的含义    \b 退格 \c 行尾不带结束符  \f换页
--  \n 换行 -r 回车  \t  制表位

[xep@localhost ~]$ echo -e "\042"  --\042是双引号
"
[xep@localhost ~]$ echo $'\n'      


[xep@localhost ~]$ echo $'\a'


echo $$              --输出登录shell的进程ID 在多人调用shell产生临时文件名时可以用$$指定
                             --避免多人引用同一临时文件引起混乱

                     
--当使用export来导出一个变量时,当前shell就会将此变量放到"导出变量列表"中,一旦在某个时刻需要建立子shell时,
--就会将这个导出变量列表拷贝一份给子shell,这样子shell也就有所应当的看到了这些被导出的变量了.

[xep@localhost ~]$ cat -n export_script
     1  #! /bin/bash
     2  #  test export
     3
     4  x=$x
     5  y=$y
     6  if [ $x -gt 0 ]
     7  then
     8   x=200
     9  fi
    10  echo $x,$y
    11  ./export1_script
    
[xep@localhost ~]$ cat -n export1_script
     1  #! /bin/bash
     2
     3  x=$x
     4  y=$y
     5
     6  echo $x:$y
     
[xep@localhost ~]$ x=100
[xep@localhost ~]$ export x
[xep@localhost ~]$ ./export_script
200,
200:

[xep@localhost ~]$ echo $x
100

--export特点
--1.没有导出的变量是局部变量,子shell看不到
--2.导出的变量,子shell可以修改它,但是父shell看不到子shell做的修改。说白了,子shell修改的是导出变量的副本。
--3.导出变量不只对子shell可见,对子shell的子shell也是可见的
--4.export -p  显示导出export 变量列表

--给子shell传值的另一做法
[xep@localhost ~]$ cat -n export2_script
     1  #! /bin/bash
     2
     3  echo $dbhome:$dbid

[xep@localhost ~]$ dbhome=/homexep/xep/work ./export2_script
/homexep/xep/work:
[xep@localhost ~]$ echo dbhome
dbhome
[xep@localhost ~]$ echo $dbhome

[xep@localhost ~]$ ./export2_script
:

--这种做法是一次性的 等第二次再调用时候 dbhome还是空 当前shell也不认识它


--大小括号
[xep@localhost work]$ { cd ../..; ls ; }
--命令放在大括号里 注意空格 命令和命令中间用分号(;)隔开,最后一条命令也要有分号 在当前shell中执行

[xep@localhost work]$ (cd ../..; ls)

--命令和命令间用分号隔开 在子shell中执行 命令结果不会影响当前shell



你可能感兴趣的:(linuxshell 读书笔记四 (unix shell 第三版))