三种shell
- 登陆shell
登陆时没有图形界面,直接操作命令行的。这个我基本上不用。
- 交互式shell
就是图形界面下开启“终端”,然后输入命令的哪个。
交互式shell启动时不会访问/etc/profile文件,它只会检查用户HOME目录中的.bashrc文件。
- 脚本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) 脚本名作为命令行参数
$ 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查看色彩
作用:终端以特定格式打印,默认不会自动添加换行符
#!/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脚本攻略>