# Bash介绍
Bash(GNU Bourne-Again Shell)是一个为GNU计划编写的Unix shell。
shell是一个命令解释器,是介于操作系统内核与用户之间的一个绝缘层。准确地说,它也是能力很强的计算机语言,被称为解释性语言或脚本语言。它可以通过将系统调用、公共程序、工具和编译过的二进制程序”粘合“在一起来建立应用,这是大多数脚本语言的共同特征,所以有时候脚本语言又叫做“胶水语言”。
所有的UNIX命令和工具再加上公共程序,对于shell脚本来说,都是可调用的。
# 简单使用
例如,一个输出Hello World
的shell程序。
#! /bin/bash
# This is a comment
echo Hello World
2
3
#!
是说明 hello 这个文件的类型,所以第一行中代码表示该文件为一个BASH程序,需要/bin
下的Bash程序来解释执行。
#
是程序的注释。
echo
语句是把echo
后面的字符串输出到标准输出中。
Bash中绝大多数语句结尾都没有分号。
查找bash所在位置:locate bash
、find / -name bash 2>/dev/null
、whereis bash
# 运行Shell脚本
# 使用shell来执行
sh hello.sh
# 使用bash来执行
bash hello.sh
使用.来执行
. ./hello.sh
使用source来执行
source hello.sh
还可以赋予脚本所有者执行权限,允许该用户执行该脚本
chmod u+rx hello.sh
./hello.sh
2
3
4
5
6
7
8
9
10
11
# 重定向
>
符号是重定向,执行以下代码,即会在当前目录下创建一个my.txt
。
#! /bin/bash
echo "Hello World" > my.txt
2
# 清理文件
/var/log/wtmp
中记录了系统的一些信息。
#!/bin/bash
# 初始化一个变量
LOG_DIR=/var/log
cd $LOG_DIR
cat /dev/null > wtmp
echo "Logs cleaned up."
exit
2
3
4
5
6
7
运行脚本前,先使用sudo chmod +x cleanlogs.sh
授予脚本执行权限。
由于脚本中含有对系统日志文件内容的清除操作,必须要管理员权限,否则会出现permission denied
错误。使用sudo命令调用管理员权限才能执行成功:sudo ./cleanlogs.sh
第一行#! /bin/bash
这一行是表示使用/bin/bash
作为脚本的解释器。
# 权限
sudo cat /dev/null > /var/log/wtmp
这一条命令中,sudo
只能让cat
命令以sudo
权限执行,但是>
符号没有sudo
权限。
可以使用sudo sh -c "cat /dev/null > /var/log/wtmp "
来让整条命令都具有sudo
权限。