博客列表 >高级bash脚本编程指南

高级bash脚本编程指南

yeyiluLAMP
yeyiluLAMP原创
2018年01月23日 22:28:491016浏览

#!/bin/bash这一行是表示使用/bin/bash作为脚本的解释器,这行要放在脚本的行首并且不要省略
脚本正文中以#号开头的行都是注释语句,这些行在脚本的实际执行过程中不会被执行。这些注释语句能方便我们在脚本中做一些注释或标记,让脚本更具可读性。

运行Bash脚本的方式:

# 使用shell来执行
$ sh hello.sh
# 使用bash来执行
$ bash hello.sh
使用.来执行
$ . ./hello.sh
使用source来执行
$ source hello.sh
还可以让脚本本有者该执行权限,允许该用户执行该脚本
$ chmod u+rx hello.sh
# 执行命令,这身就具有可执行权限,通过chmod命令可以修改:
# 赋予脚本的所将使用脚本第一行指定的shell来执行,如果指定shell不存在,将使用系统默认shell来执行
$  ./hello.sh



遇到权限不够的提示,为什么,如何解决?
权限不够加sudo啊,可是你会发现

sudo cat /dev/null > /var/log/wtmp

一样会提示权限不够,为什么呢?因为sudo只能让cat命令以sudo的权限执行,而对于>这个符号并没有sudo的权限,我们可以使用

sudo sh -c "cat /dev/null > /var/log/wtmp "
sudo bash -c "cat /dev/null > /var/log/wtmp"



让整个命令都具有sudo的权限执行

/dev/null这个东西可以理解为一个黑洞,里面是空的(可以用cat命令看一看),什么东西都可以往里面扔,扔了就没了

vim cleanlog.sh

#!/bin/bash
LOG_DIR=/var/log
cd $LOG_DIR
cat /dev/null > wtmp
echo "logs cleaned up."
exit

执行

由于脚本中含有对系统日志文件内容的清除操作,这要求要有管理员权限.不然会报permission denide错误

使用sudo命令调用管理员权限才能执行成功:

$ sudo ./cleanlogs.sh

#!/bin/bash这一行是表示使用/bin/bash作为脚本的解释器,这行要放在脚本的行首并且不要省略
脚本正文中以#号开头的行都是注释语句,这些行在脚本的实际执行过程中不会被执行。这些注释语句能方便我们在脚本中做一些注释或标记,让脚本更具可读性。

为什么cleanlogs.sh可以将log文件清除?
因为/dev/null ,里面是空的,什么东西都可以往里面扔,扔了就没了




vim test2.sh

#!/bin/bash
echo "Hello";echo "World";
filename=ttt.sh
if [ -e "$filename" ];then
    echo "File $filename exists";cp $filename $filename.bak
else
    echo "File $filename not found";touch $filename
fi;

vim test3.sh

#!/bin/bash
varname=b
case $varname in
[a-z]) 
    echo "abc"
    ;;
[0-9]) 
    echo "123"
    ;;
esac;


反引号(`)
1.命令替换
反引号中的命令会优先执行,如:

$ cp `mkdir back` test.sh back
$ ls

先创建了 back 目录,然后复制 test.sh 到 back 目录


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议