1.Shell基本介绍和基本使用

编程语言介绍

编程语言:人与计算机之间交互的语言。分为两种:低级语言和高级语言
低级编程语言:
机器:二进制的0和1的序列,称为机器指令。与自然语言差异太大,难懂、难写
汇编:用一些助记符号替代机器指令,称为汇编语言
 如:ADD A,B 将寄存器A的数与寄存器B的数相加得到的数放到寄存器A中
 汇编语言写好的程序需要汇编程序转换成机器指令
 汇编语言稍微好理解,即机器指令对应的助记符,助记符更接近自然语言
高级编程语言:
编译:高级语言-->编译器-->机器代码文件-->执行,如:C,C++
解释:高级语言-->执行-->解释器-->机器代码,如:shell,python,php,JavaScript,perl
编译和解释型语言

Shell脚本语言的基本结构

shell脚本的用途

将简单的命令组合完成复杂的工作,自动化执行命令,提高工作效率
减少手工命令的重复输入,一定程度上避免人为错误
将软件或应用的安装及配置实现标准化
用于实现日常性的,重复性的运维工作,如:文件打包压缩备份,监控系统运行状态并实现告警等

shell脚本基本结构

shell脚本编程:是基于过程式、解释执行的语言
编程语言的基本结构:
各种系统命令的组合
数据存储:变量、数组
表达式:a + b
控制语句:if
shell脚本:包含一些命令或声明,并符合一定格式的文本文件
格式要求:首行shebang机制
我们的脚本第一行需要按固定格式写,因为我们的shell属于解释性语言,需要
使用对应的解释器来执行代码

#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl

创建shell脚本过程

第一步:使用文本编辑器来创建文本文件
第一行必须包括shell声明序列:#!
示例: #!/bin/bash
添加注释,注释以#开头
第二步:加执行权限
给予执行权限,在命令行上指定脚本的绝对或相对路径
第三步:运行脚本
直接运行解释器,将脚本作为解释器程序的参数运行

shell 脚本注释规范

1、第一行一般为调用使用的语言
2、程序名,避免更改文件名为无法找到正确的文件
3、版本号
4、更改后的时间
5、作者相关信息
6、该程序的作用,及注意事项
7、最后是各版本的更新简要说明

第一个脚本范例

#!/bin/bash
echo “hello world”

执行脚本的方法

[root@localhost ~]# vim hello.sh
[root@localhost ~]# cat hello.sh
echo "hello word"
# 我们需要给脚本加执行权限
[root@localhost ~]# chmod +x hello.hs
[root@localhost ~]# ll
-rwxr-xr-x. 1 root root   18 Apr  8 18:35 hello.sh
# 执行执行脚本是会报错的
[root@localhost local]# hello.sh
-bash: /usr/local/bin/hello.sh: No such file or directory
[root@localhost local]#
# 所以我们此时可以设置一个软链接,让其加入到系统的环境变量里面
[root@localhost local]# ln -s ../../../root/hello.sh /usr/local/bin/
[root@localhost local]# ll /usr/local/bin/hello.sh
lrwxrwxrwx. 1 root root 22 Apr  8 18:39 /usr/local/bin/hello.sh -> ../../../root/hello.sh
[root@localhost local]# hello.sh
hello word
[root@localhost local]# rm -f /usr/local/bin/hello.sh


#执行方法1
[root@centos8 ~]#bash /data/hello.sh
#执行方法2
[root@centos8 ~]#cat /data/hello.sh | bash
#执行方法3
[root@centos8 ~]#bash < /data/hello.sh
#执行方法4
[root@centos8 ~]#chmod +x /data/hello.sh
#绝对路径
[root@centos8 ~]#/data/hello.sh
#相法路径
[root@centos8 ~]#cd /data/
[root@centos8 ~]#./hello.sh
#执行方法5,本方法可以实现执行远程主机的shell脚本
[root@centos8 ~]#yum -y install httpd
[root@centos8 ~]#systemctl start httpd
[root@centos8 ~]#mv /data/hello.sh /var/www/html/
[root@centos8 ~]#curl http://10.0.0.8/hello.sh
#!/bin/bash
#经典写法
echo 'Hello, world!'
[root@centos8 ~]#curl http://10.0.0.8/hello.sh | bash
 % Total   % Received % Xferd Average Speed   Time   Time     Time Current
                                 Dload Upload   Total   Spent   Left Speed
100   388  100   388    0     0   378k      0 --:--:-- --:--:-- --:--:-- 378k
hello, world
Hello, world!
[root@centos8 ~]#curl -s http://10.0.0.8/hello.sh |bash
[root@localhost ~]#

范例:备份脚本

将/etc下面的目录备份到/data下

#!/bin/bash
echo -e "\033[1;32mStarting backup...\033[0m"
sleep 2
cp -av /etc/ /data/etc`date +%F`/
echo -e "\033[1;32mBackup is finished\033[0m"

脚本调试

只检测脚本中的语法错误,但无法检查出命令错误,但不真正执行脚本

bash -n /path/to/some_script

调试并执行

bash -x /path/to/some_script

范例:

[root@centos8 scripts]#cat -A test.sh
#!/bin/bash$
echo line1$
hostnam$
cat > test.txt <<EOF $
aaa$
bbb$
ccc$
EOF $ 
$
echo line22$
[root@centos8 scripts]#bash -n test.sh
f1.sh: line 20: warning: here-document at line 14 delimited by end-of-file 
(wanted `EOF')

# 上面的错误是因为我们的EOF后面写了个空格,我们需要在vim中:set list将不可见
#    字符显示出来,我们才可以看到,也就是每条语句后面的$
# 我们还要注意,报错提示的行号不一定正确

总结:脚本错误常见的有三种

  • 语法错误,会导致后续的命令不继续执行,可以用bash -n 检查错误,提示的出错行数不一定是准确的
  • 命令错误,默认后续的命令还会继续执行,用bash -n 无法检查出来 ,可以使用 bash -x 进行观察
  • 逻辑错误:只能使用 bash -x 进行观察
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值