Shell之终端输入输出&&调试脚本

终端输入

$ read    -- Enter作为结束符
123456

从输入中读取n个字符并存入变量

$  read -n 2 var  
12$ echo $var
12

用无回显的方式读取密码:

$ read -s var 
$ echo $var
123456

使用read显示提示信息:

$ read -p "Enter input:" var 
Enter input:5697832
$ echo $var
5697832

在给定时限内读取输入

$ read -t 2 var  #在2秒内将键入的字符串读入变量var 

用特定的定界符作为输入行的结束

$ read -d ":" var 
helloi:

在终端输出

  • 终端是什么样子的?
ocean@ubuntu:~$
root@ubuntu:~#

小结:
(1) 终端提示符的形式有两种,如下

username@hostname$ 
root@hostname #

$表示普通用户,#表示管理员用户root

(2)尽量不要使用root权限操作,推荐平时普通用户,需要权限时sudo切换

  • 第一个脚本
$ sudo gedit myScript.sh
#!/bin/bash  # shell脚本的第一行一定是#!/bin/bash,其中(#!)位于解释器路径之前;/bin/bash是Bash解释器的路径
echo "welcome to bash"
  • 如何执行脚本

(1) 脚本名作为命令行参数

扫描二维码关注公众号,回复: 5462687 查看本文章
$ bash myScript.sh 
welcome to bash
$ /bin/bash myScript.sh 
welcome to bash

echo

(1)作用:终端打印,默认每次调用之后会添加一个换行符

$ echo "welcome to bash"
welcome to bash
$ echo 'welcome to bash'
welcome to bash
$ echo welcome to bash
welcome to bash

""shell解释器会解释特殊符号,’'原样打印

ocean@ubuntu:~$ echo '$PWD'
$PWD
ocean@ubuntu:~$ echo "$PWD"
/home/ocean

echo中如果想要"包含转义序列的字符串",使用echo -e

$ echo -e "1\t2\t3"
1	2	3

echo -n 禁止自动添加换行符

$ echo -n "welcom"
welcomocean@ubuntu:$

(2)输出彩色文本

文本颜色是由对应的色彩码来描述的。其中包括:重置=0,黑色=30,红色=31,绿色=32,
黄色=33,蓝色=34,洋红=35,青色=36,白色=37。

$ echo -e "\e[1;31m This is red text \e[0m" 
#其中\e[1;31m是一个转义字符串,可以将颜色设为红色,\e[0m将颜色重新置回。只需要将31替换成想要的色彩码就可以了。

对于彩色背景,经常使用的颜色码是:重置=0,黑色=40,红色=41,绿色=42,黄色=43,
蓝色=44,洋红=45,青色=46,白色=47

$ echo -e "\e[1;42m Green Background \e[0m" 

备注:$ man console_codes查看色彩

print

作用:终端以特定格式打印,默认不会自动添加换行符

#!/bin/bash 
#文件名: printf.sh 
printf "%-5s %-10s %-4s\n" No Name Mark 
printf "%-5s %-10s %-4.2f\n" 1 Sarath 80.3456 
printf "%-5s %-10s %-4.2f\n" 2 James 90.9989 
printf "%-5s %-10s %-4.2f\n" 3 Jeff 77.564 

执行脚本

$ sudo chmod 755 printf.sh 
$ ./printf.sh 
No    Name       Mark
1     Sarath     80.35
2     James      91.00
3     Jeff       77.56

原理:

  • %s、%c、%d和%f都是格式替换符(format substitution character),它们定义了该如何打印后续参数。
  • %-5s指明了一个格式为左对齐且宽度为5的字符串替换(-表示左对齐)。如果不指明-,字符串就采用右对齐形式。宽度指定了保留给某个字符串的字符数量。如果内容不足5个字符,就以空格填充。
  • %-4.2f 表示保留2位小数
  • \n是换行符

打印各种颜色的字体

#!/bin/bash

# This script printf colors and codes

printf "\e\033[4;31m 浅 色\033[0m    \t\t\033[1;4;31m 深 色\033[0m\n"

printf "\e[0;30;47m 黑      \e[0m 0;30m \t\e[1;30;40m 深 灰   \e[0m 1;30m\n"

printf "\e[0;31;47m 红      \e[0m 0;31m \t\e[1;31;40m 深 红   \e[0m 1;31m\n"

printf "\e[0;32;47m 绿      \e[0m 0;32m \t\e[1;32;40m 深 绿   \e[0m 1;32m\n"

printf "\e[0;33;47m 黄      \e[0m 0;33m \t\e[1;33;40m 亮 黄   \e[0m 1;33m\n"

printf "\e[0;34;47m 蓝      \e[0m 0;34m \t\e[1;34;40m 深 蓝   \e[0m 1;34m\n"

printf "\e[0;35;47m 紫红    \e[0m 0;35m \t\e[1;35;40m 暗紫红  \e[0m 1;35m\n"

printf "\e[0;36;47m 青      \e[0m 0;36m \t\e[1;36;40m 深 青   \e[0m 1;36m\n"

printf "\e[0;37;47m 浅 灰   \e[0m 0;37m \t\e[1;37;40m 白      \e[0m 1;37m\n"

脚本调试

(1) 跟踪调试命令

$ bash -x time.sh  #打印出所执行的每一行命令以及当前状态

-x选项会输出脚本中执行过的每一行
(2) 部分调试

#!/bin/bash 
#文件名: debug.sh 
for i in {1..6}; 
do 
  set -x 
  echo $i 
  set +x 
done 
echo "Script executed" 

只会打印出echo $i的调试信息,因为使用-x和+x对调试区域进行了限制
 set -x:在执行时显示参数和命令。
 set +x:禁止调试。
 set -v:当命令进行读取时显示输入。
 set +v:禁止打印输入。

(3)自定义调试信息

#!/bin/bash 
function DEBUG() 
{ 
  [ "$_DEBUG" == "on" ] && $@ || : 
} 
for i in {1..10} 
do 
  DEBUG echo "I is $i" 
done 

运行命令:

$ _DEBUG=on bash script.sh 

可以通过定义 _DEBUG环境变量来启用或禁止调试及生成特定形式的信息:在每一条需要打印调试信息的语句前加上DEBUG
参考:<Linux_Shell脚本攻略>

猜你喜欢

转载自blog.csdn.net/zhizhengguan/article/details/88299785