您的位置:首页 > 运维架构 > Shell

shell编程中 read export echo 理解

2015-06-12 19:34 639 查看
read的参数

-p

-n

-s

-t

代码如下:

#! /bin/bash

read -p "input three number" num1 num2 num3
echo $num1
echo $num2
echo $num3
exit 0


然后bash 这个shell

输入 10 11 12 输出 10 11 12

但是这里存在三种情况

第一种输入变量 < 3

如输入 10 11 则导致的结果是 num1 =10 num2 = 11 num3 为空

第二种输入的变量 = 3

如输入 10 11 12 则导致的结果是 num1 =10 num2 = 11 num3 =12

第三种输入的变量 > 3

如输入 10 11 12 13 14则导致的结果是 num1 =10 num2 = 11 num3 =12 13 14

-t 是限制输入变量的时间

如 -t 5 如果5s 内没有输入数据则变量都为空 程序继续执行下去

-n 是限制总共可以输入多少个字符

如 -n 20 则总共可以输入20个字符 是字符哦 qwe123空格 就是7个字符

没有输够20个字符 一直在等待

如果 -t 20 -n 20 结合使用 则 20s后如果没有输入够20 个字符 也不会等待直接执行下一句 如果在20s内 输入够20个字符 直接执行下一句

-s 是不把输入的内容显示出来 如输入密码 这个和C语言中的关回显是一样 system(“stty -icanon”);

上面遗留了一个问题 就是 父shell 和子 shell 的问题

在实行shell 终端 下 输入 echo $num 是没有结果的 因为产生了子shell 执行了这个程序 但是子shell定义的变量传递不到父shell 中

有这个几个总结

1 一个shell中的系统环境变量会被复制到子shell中(用export定义的)

2一个shell中的环境变量只对该shell和该shell创建的子shell有效 该shell定义的变量不会返回到父shell中

3不用export定义的变量只对该shell有效 对子shell无效(如在shell终端中输入name=bob 接着再输入bash 则就开启了一个子shell 在子shell中 echo$name 结果为空 但是 如果是export name=bob 结果就是bob)

如果想让子shell 定义的变量父shell可以使用 则使用 source XX.sh

插入一个知识点

执行一个shell 有三种方法
1  ./ XX.sh    这样执行shell需要  chmod +x XX.sh
2 sh XX.sh    sh 软连接的bash   可以在/bin目录下 执行 readlink sh 或者 ls -l | grep sh 就可以看出
3 . 或者 source XX.sh


sh xx.sh 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export来传递。

source xx.sh:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面

echo 参数

-n
-e


-n 是不换行输出

echo -n “123”

echo -n “456”

结果为123456

-e 处理特殊字符

如果字符串出现一下字符 则不会当做一般文字输出

\a 发出警告

\b 删处前一个字符

\c 最后不加换行

\t tab符

\r 光标回到当前行的行首

\n 换行

\ \

等 和C语言的转义字符差不多

echo -e “a\bcdef” 结果 cdef

echo -e “ab\c” 不会换行

echo -e “a\bcdef” 结果

a

cdef

echo 可以输出有颜色的字体 就和VT100码一样

echo -e “\033[字背景颜色;字颜色m 字符串 \033[0m”

40—47 是背景颜色 30 —–37 是字颜色

结束!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: