Linux学习基础——之shell基础——脚本的执行方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxllynu/article/details/85019111

所有的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:[email protected])

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([email protected])

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 命令即可

如果这两个命令没装,可以安装一下即可。

猜你喜欢

转载自blog.csdn.net/zxllynu/article/details/85019111
今日推荐