shell编程中 read export echo 理解
2015-06-12 19:34
639 查看
read的参数
-p
-n
-s
-t
代码如下:
然后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
插入一个知识点
sh xx.sh 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export来传递。
source xx.sh:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面
echo 参数
-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 是字颜色
结束!
-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 是字颜色
结束!
相关文章推荐
- PowerShell配置Exchange Server集线器配置
- HBase Shell的基本用法
- sourceRelative("xxx.bsh")
- SharePoint自动化系列——通过PowerShell在SharePoint中批量做数据
- linux_shell_拆分文件_多进程脚本
- Microsoft.VisualStudio.Shell.14.0.dll 文件位置
- shell编程之sed和awk
- Shell if语句用法小结
- Linux shell脚本——if运算例子
- shell的if语句
- Linux脚本语言shell基础学习
- android adb shell 命令大全
- HBase的SHELL操作和API
- shell case语句
- linux shell脚本神一般的测试案例
- adb shell input keyevent直接发送键值给设备
- bash操作
- shell脚本,用于自动构建xcode项目
- MySQL问题解决:-bash:mysql:command not found
- Shell脚本之break,continue,和exit区别