变量
a=10
定义一个变量
echo $a
输出变量a
unset a
删除变量a
readonly b
b变量只读(只读变量不能删除)
字符串:name="asdsdsd"
拼接字符串:name2="hello,"$name"!"
数组 arrayname=(value0 value1 value2 value3)
取数组值:value=${arrayname[n]}
给数组单独赋值:arrayname[0]=value0
arrayname[*]或者arrayname[@]取出数组所有的数据
控制分支
if [ 2==2 ];then echo "true";else echo "false";fi
if [[ 3>2 ]];then echo "true";else echo "false";fi
-gt:大于 -lt:小于 -eq:等于
if [ 3 -gt 2 ];then echo "true";else echo "false";fi(使用gt等就可以只用一个大括号)
注意:if跟括号之间需要空格,括号与变量之间需要空格
for循环
for var in item1 item2 ....itemN
do
command1
command2
.......
commandN
done
列如:
for i in $(cat test.txt);do echo $i;done
表示循环读取文件内容并输出
while循环
while condition
do
command
done
列如:
while read line;do echo $line;done<dir.txt
表示从dir.txt文件中读取,循环的读取文件中的每一行
注意:文件中,一行数据如果有空格分隔,使用for循环时,会被分成两行。使用while循环,不会分成两行。
bash脚本编写
read命令
read命令是用于从终端或者文件中读取输入的内部命令,读取整行输入,但每行末尾的换行符不被读入
列如:
read var 从标准输入读取输入并赋值给变量
read var1 var2 var3 从标准输入读取多个内容
read 不指定变量(默认赋值给REPLY)
列如:
read a
123 (往a中写入值123)
echo $a (结果输出:123)
脚本参数传递(脚本写在.sh文件中,脚本中要怎么接受传参呢?)
$0 脚本名称
$1~$n 获取参数
$# 传递到脚本的参数个数
$$ 脚本运行的当前进程ID号
$* 以一个单字符串显示所有向脚本传递的参数
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误
列如,新建一个test.sh文件,在该文件中输入:
#! /bin/bash
echo $1,$2,$3
echo "文件名 "$0
echo "参数数量 "$#
echo "all "$*
echo "return "$?
保存文件
然后输入:bash test.sh 1 2 3
实际结果输出:
基本运算
+ 加法 `expr $a + $b`
- 减法 `expr $a - $b`
* 乘法 `expr $a \* $b`
/ 除法 `expr $a / $b`
注意:要使用反引号,键盘数字1左边的符号就是反引号;expr与$符号之间的空格,变量与运算符之间的空格,都不能少,语法严格控制,不然会报错
% 取余 `expr $a % $b`
= 赋值 a=$b 把变量b的值赋给a
== 相等 相同则返回true:[ $a == $b ]返回false(a=10 b=20)
!= 不相等 不相同则返回true:[ $a != $b ]返回true(a=10 b=20)
-eq 检测相等 [ $a -eq $b ]
-ne 检测不相等 [ $a -ne $b ]
-gt 检测左边是否大于右边 [ $a -gt $b ]
-lt 检测左边是否小于右边 [ $a -lt $b ]
-ge 检测左边是否大于等于右边 [ $a -ge $b ]
-le 检测左边是否小于等于右边 [ $a -le $b ]
bash与linux命令组合
bash与目录命令:
mkdir test
cd test
上面创建了一个test目录
echo "hello" > test.txt 创建了test.txt文件
使用echo 将hello 重定向到test.txt文件中,文件中就有了hello
cat test.txt (输出文件的内容)
bash与内存:
for i in `ps aux | awk '{print $6}' | grep -v 'RSS'`
count=$[$count+$i]
echo "$count/kb"