变量
声明变量:
declare attribute variable
#attribute表示变量的属性,常见的属性如下:
# -i 将变量定义为整数;-a 变量声明为数组变量;-r 将变量声明为只读变量;-x 将变量设置成环境变量
局部变量:
在函数的内部通过local关键字定义局部变量,此外,函数的参数也是局部变量。作用域从被定义的地方开始,到函数的结束或被显示的删除,在函数外面使用局部变量会得到一个空值
全局变量:
可以在脚本中定义,也可以在函数中定义(不使用local关键字)。作用域从被定义的地方开始,一直到shell脚本结束或者被显示的删除
系统变量:
$n 表示传递给脚本的第n个参数
$0 当前脚本的名称
$# 命令行参数的个数
$? 前一个命令或者函数的返回状态码(也包括函数的返回值),执行成功返回0,否则,返回1
$* 以“参数1 参数2 参数3..”的形式返回所有参数的值
[email protected] 以“参数1”说“参数2”“参数3..”的形式返回所有参数的值
$$ 返回本程序的进程ID(PID)
$_ 保存之前执行的命令的最后一个参数
环境变量:
shell程序在运行时,都会接收一组变量,这组变量就是环境变量
#使用 set 命令列出所有的环境变量
PATH 命令搜索路径,以冒号为分隔符,当前目录不在系统路径里(这点与Windows不同)
HOME 用户主目录的路径名,是cd命令的默认参数
SEHLL shell的全路径名
PWD 当前的工作目录
HISTFILE 命令历史文件
LOGNAME 当前的登录名
TMOUT shell自动退出的时间,单位为秒,若设为0则禁止shell自动退出
变量赋值:
variableName=value
命令替换:
#指在shell程序中,将某个shell命令的执行结果赋给某个变量。
#在bash中,有以下两种语法可以进行替换
variableName=‘command‘
variableName=$(command)
#赋值号“=”的左右两边不能直接跟空格,否则shell会将其视为命令
引用变量:
${variableName}或$variable
间接变量引用:
var=name
name=John
${!var}与${name}的效果相同
清除变量:
unset variableName
特别注意:
单引号括起来的的字符都作为普通字符出现
双引号括起来的字符,除“$”“\”“‘”(单引号)和“"”(双引号)之外,其余字符作为普通字符对待
反引号括起来的字串被shell解释成命令,在执行时,shell首先执行该命令,并以它的标准输出结果取代整个反引号部分
------------------------------------------------------------------------------------------
条件测试(test命令和[命令):
#条件测试中的指定条件为真时,条件测试的返回值为0;为假时,返回值为非0值
#test命令
test expression
#[命令
#为了增强程序可读性,shell要求在条件表达式后面追加一个右方括号]来与前面的[的命令配对
#条件表达式与左右方括号之间必须都保留一个空格
[ expression ]
#如果expression是一个字符串,则 -n 判断字符串是否是非空;-z 判断字符串是否是空串,使用“=”和“!=”判断两个字符串是否相等
#如果expression是一个文件名,
#则 -e(或-a) 判断文件是否存在;-r、-w、-x判断文件是否存在,且是否可读、可写、可执行;-b、-c、-d、-L判断文件是否存在,且是否为块、字符目录、链接文件
#如果expression是一个由逻辑与、逻辑或、逻辑非构成的表达式,则 !表示逻辑非;-a 表示逻辑与;-o 表示逻辑或
------------------------------------------------------------------------------------------
if语句:
if expression
then
statement1
statement2
...
else
statement3
statement4
...
fi
或:
if expression
then
statement1
statement2
...
elif expression2
then
statement3
statement4
...
elif expression3
then
statement5
statement6
...
else
statement7
...
fi
#在shell中,有一个特殊的命令,称为空命令,表示方法是一个冒号“:”,该命令不做任何事情,但是它的退出状态永远是0
exit语句:
#exit语句的基本作用是终止shell程序的执行,可带一个可选的参数,用来指定程序退出时的状态码
exit status
------------------------------------------------------------------------------------------
case语句:
case variable in
value1)
statement1
...
statement2;;
value2)
statement3
...
statement4;;
*)
statement5
...
statement6;;
esac
------------------------------------------------------------------------------------------
for循环:
for variable in {list}
do
statement1
statement2
...
done
#list是一个列表,可以是一系列数字或字符串,元素间用空格隔开,如果使用字符串做列表元素,则外面的大括号可以省略
# {1..8} 表示1-8的简写
# {1..100..5} 表示1-100间,从1开始,每次递增5,即1,6,11,16...
# ${arrayName[*]} 表示数组arrayName的全部元素
不带列表的for循环:
#shell从命令行获取条件列表,以下三种形式等价
for variable for variable in [email protected] for variable in $*
do do do
statement1 statement1 statement1
statement2 statement2 statement2
... ... ...
done done done
类C风格的for循环:
for ((expression1;expression2;expression3))
do
statement1
statement2
...
done
------------------------------------------------------------------------------------------
util循环:
util expression
do
statement1
statement2
...
done
------------------------------------------------------------------------------------------
while循环:
while expression
do
statemnet1
statement2
...
done
------------------------------------------------------------------------------------------
函数的定义:
function functionName()
{
statement1
...
}
#function可以省略
------------------------------------------------------------------------------------------
别名的设定与删除:
alias name="command"
unalias name
------------------------------------------------------------------------------------------
算数运算:
expr、$((...))、$[...]和let
#expr是一个shell命令,可以计算摸个表达式的值
expr expression
举例:
#先计算2和6的差,然后再乘以12,并把计算结果赋给变量result
#一定要注意运算符(幂运算“**”)左右的空格,且expr不能计算幂运算
result=`expr \( 2 - 6 \) \* 12`
result=$(( 1 + 2 ))
result=$[ 1 + 2 ]
let n=n + 1 (还是 let n=n+1 ?)
------------------------------------------------------------------------------------------
cat 查看文件内容:
cat fileName
# -n 显示文本的行号
cat -n fileName
# grep -n "" fileName和上一行的作用相同
---------------------------------------------------------------------------------
echo 输出文本
echo [options] string
#如果要输出的文本是由多个单词组成的,则可以使用双引号或者单引号将其引起来。
#如果不用引号引起来,则echo命令将一个字符串根据空格分割成多个字符串输出了
# -n 禁止echo语句执行完成后自动附加换行符
# 转义字符 \c 禁止继续输出文本
echo `command`
#echo可以将shell命令执行结果显示出来,且需要使用反引号将命令引用起来
#将echo命令显示的信息覆盖到目标文件中
echo string > fileName
#将echo命令显示的信息追加到目标文件的末尾
echo string >> fileName
------------------------------------------------------------------------------------------
rev 反转每行字符的顺序
rev [files]
#files表示要处理的文件的文件名列表,如果是多个文件,则文件名之间用空格隔开