所有的Linux命令都可以在shell中执行
1、echo 输出命令
【root@localhost ~】#echo 【选项】【输出内容】
选项:
-e :支持反斜线控制的字符转换
那什么样的字符加反斜线才能被识别呢?
看如下表格
控制字符 | 作用 |
\\ | 输出 \ 本身 |
\a | 输出警告音 |
\b | 退格键,也就是向左删除键 |
\c | 取消输出行末的换行符。和“-n”选项一致 |
\e | ESCAPE键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车键 |
\t | 制表符,也就是Tab键 |
\v | 垂直制表符 |
\Onnn | 按照八进制ASCLL码表输出字符。其中0位数字零,nnn是三位八进制数 |
\xhh | 按照十六进制ASCLL码表输出字符。其中hh是两位十六进制数 |
注意:如果要输出的内容中有空格,需要添加“引号”
示例
1):输出hello world! 特别注意,感叹号有特别作用,所以此处如果想输出感叹号,需要使用单引号,
[root@localhost ~]# echo "hello world"
hello world
[root@localhost ~]# echo 'hello world !'
hello world !
[root@localhost ~]#
注意,如果使用双引号,如第一行,请不要在此处添加感叹号。因为感叹号有特殊作用
具体后面学习到再说
2)示例删除左侧字符:
【root@localhost ~】#echo -e "ab\bc"
[root@localhost ~]# echo -e "ab\bc"
ac
3)制表符与换行符
【root@localhost ~】#echo -e "a\tb\tc\nd\te\tf"
[root@localhost ~]# echo -e "a\tb\tc\nd\te\tf"
a b c
d e f
[root@localhost ~]#
解析:a和b b和c 之间插入了制表符,c和d之间插入了换行符
4)#按照十六进制ASCII码也同样可以输出
【root@localhost ~】#echo -e "\x61\t\x63\n\x64\t\x65\tx66"
[root@localhost ~]# echo -e "a\tb\tc\nd\te\tf"
a b c
d e f
[root@localhost ~]# echo -e "\x61\t\x62\t\x63\n\x64\t\x65\t\x66"
a b c
d e f
[root@localhost ~]#
注:十六进制的ASCII码可以从网上找到相对应的表,即数字和字符的对应表示
5)#输出颜色
【root@localhost ~】#echo -e “\e[1;3]m abcd \e[0m”
注:#30m =黑色,31m=红色,32m=绿色,33m=黄色
#34m=蓝色 ,35m=洋红,36m=青色,37m=白色
会输出红色的abcd
[root@localhost ~]# echo -e "\e[1;31m abcd \e[0m"
abcd
[root@localhost ~]#
注:\e[1; 表示开启颜色调节输出, \e[0m 表示结束颜色调节输出
2、第一个脚本
【root@localhost sh】# vi hello.sh
#!/bin/Bash
#The first program
#Author:xiaoxiaozhou (E-mail:2333@qq.com)
echo -e "Mr.xiaoxiaozhou is the most honest man in his shcool'
注意:如上#!/bin/Bash 属于例外,不是注释,而是标识,
除此之外,在Linux中一般以#开头的是注释;该句不可省,表示如下是shell脚本
[root@localhost sh]# vim hello.sh
#!/bin/bash
#xiaoxiaozhou(2333@qq.com)
echo "Mr.xiaoxiaozhou is the honest man in our school"
3、脚本执行的方式:
步骤一:要想运行,必须赋予相应执行权限;
步骤二:所有命令或者脚本的执行,实质都是需要使用绝对路径的方式
(没有明显使用绝对路径的,一定用了其他方式,比如配置环境变量,但实质没变)
》赋予执行权限,直接运行
>>chmod 755 hello.sh
>>./hello.sh
[root@localhost sh]# chmod 755 hello.sh
#用户想要执行脚本,必须对其有执行权限,所以上述做了赋予权限的动作
[root@localhost sh]# ll
总用量 4
-rwxr-xr-x. 1 root root 97 12月 16 09:24 hello.sh
#通过绝对路径调用执行
[root@localhost sh]# /root/sh/hello.sh
Mr.xiaoxiaozhou is the honest man in our school
#通过相对路径调用执行
[root@localhost sh]# ./hello.sh
Mr.xiaoxiaozhou is the honest man in our school
[root@localhost sh]# ls
hello.sh
[root@localhost sh]#
》通过Bash调用执行脚本
>>bash hello.sh
[root@localhost sh]# bash hello.sh
Mr.xiaoxiaozhou is the honest man in our school
[root@localhost sh]#
4、如果运行一个陌生的 .sh的脚本,运行失败,怎么办?
步骤一、根据提示确认不可执行的原因,如果是没有权限,赋予相应权限即可;
如果是其他,比如提示找不到文件,先确认路径是否正确,是否有通过实质的绝对路径的方式进行了访问;
如果路径和权限都对,但是提示如下
[root@localhost ~]./Tetris.sh
--bash:./Tetris.sh: /bin/bash^M:bad interpreter:没有那个文件或目录
[root@localhost ~]
通过提示可以看到,M 相关错误这其实是说脚本文件中出错了,解决步骤如下;
步骤二、权限和路径错误都好解决,如果是上方末尾问题,那其实是因为该脚本文件编辑环境其实是在Windows环境下编辑好,拷贝到当前Linux环境下进行运行的。因为Linux脚本中,正常的回车符结尾是$结尾的,但是在Windows中,编辑的 回车符,结尾是以M$结尾,所以移到Linux环境下,M不被识别
那如何验证是否同上所说呢?
通过cat -A [脚本文件路径] -A选项可以把文件中的隐藏字符都查出来,比如这里的M$
所以显示错误。
解决原理:把M$换成$即可;
解决方法:有两个,
方法一:手动更换;
方法二:使用命令dos2unix [要转换的文件名] 转换
转换完,即可正常运行。
扩展:相反,在Linux中编辑的.sh文件,想在Windows中运行,只要使用unix2dos 命令即可
如果这两个命令没装,可以安装一下即可。