bash脚本(一)

学习笔记

bash的一些基本语句

bash最前面的一行一般是

#!/bin/bash

这个指示该脚本通过/bin/bash来运行。

export:用于设置环境变量,最常见的用法就是写在”~/.profile”里,
然后就可以在开机后自动写入环境变量。

export VARNAME="value"

exit:终止脚本并退出。

其返回值储存在主调函数的$?变量里。

读入:

read [options] NAME1 NAME2 ... NAMEN

bash注释:每行前面加#

执行脚本可以用bash/sh filename或者source filename或者直接用文件名。

如果提示权限不够,可以用chmod 755 filename来设置权限。

debug模式运行命令为:
bash -x filename

这个模式可以在运行的同时显示运行结果和代码。

在代码里可以这样写:

code
set -x
debug code
set +x
code

这样只会输出中间部分的代码。

在bash里前面用减号就是开启一个选项,用加号就是取消。

env:输出全局变量.

变量设定:变量名=”value”

取消变量:unset 变量名

输出变量值要用:echo \$变量名

调用脚本的时候传入的参数使用方法:

调用脚本传入三个参数

./script.sh para1 para2 para3
#script.sh
PARA1=$1
PARA2=$2
PARA3=$3

即第n个参数就用$n来引用。

数学计算要用两个圆括号或一个方括号:

A=3
B=4
C=$(($A+$B))
D=$[$A+$B]

为一个命令起别名以及取消命名(方便啊):

alias name='command'
unalias name

正则表达式

grep命令:在给定的文件中按照给出的模式搜寻字符串。

可以这样用

grep ^root /etc/passwd
grep export ~/.bashrc | grep '\<PATH'

由于grep是寻找匹配的行,所以使用|分割的命令可以达到先确定export所在行再在这些行里查找PATH开头的效果。

正则表达式的语法还是比较多的就不记了。。。

gnu sed and awk

这两个东西可以用来批处理文本。

配合正则表达式可以有很不错的功能。

暂时先知道有这么个东西。

听说awk是神器级的文本处理语言!

if语句

这个很重要,在任何语言里都很重要。。。

if TEST-COMMANDS; then CONSEQUENT-COMMANDS; fi

bash的比较和一般语言不太一样。还是需要查reference的。

一定要注意空格。。。

A=3
B=2
if [ "$A" -ne "$B" ]; then
    echo 233;
fi

连续的if else结构

if TEST-COMMANDS; then
CONSEQUENT-COMMANDS;
elif MORE-TEST-COMMANDS; then
MORE-CONSEQUENT-COMMANDS;
else ALTERNATE-CONSEQUENT-COMMANDS;
fi

重定向

#重定向输入
command < input_file
#重定向输出
command > output_file
#连续的命令通过管道重定向
first_command | second_command
#重定向标准错误
command 2>error_file
#标准输出和错误写至不同的文件
command >output_file 2>error_file
#将标准错误发送至标准输出被重定向的任何位置
command 2>&1

1是标准输入输出,2是标准错误,其他数字还可以用来表示不同的文件。

#将n作为输出file的id
exec fdN> file
#将n作为输入file的id
exec fdN< file

重定向还没仔细看完,以后用到再补。

reference

1.Machtelt Garrels, Bash Guide for Beginners