#!/bin/bash
1.变量
脚本中定义和函数内部定义的变量默认为全局变量,作用域到脚本结束或删除为止。
局部变量添加local关键字。局部变量函数外不能调用。
shell中常见的系统变量:
$0脚本,$n(1..)参数位置;$#命令行参数个数;$?;$$返回本程序的ID;
$*以"参数1参数2参数3.。。"形式返回一个字符串。
$@以"参数1"“参数2”“参数3”形式返回每个参数。
环境变量:
shell中的环境变量是所有shell程序都可以使用的变量。PATH,HOME,HISTFILE,HISTFILENAME,LOGNAME,等
变量引用:注意一定是双引号“”,单引号内所有字符,均视为一般字符(全引用)
echo "$v1" ###单独引用
echo "${v1}abc" ###和其他子串一起
2.字符串判断
= !=
-n string ;非空:判断它是否是 非空,是,返回0,
-z string ;为空:判断它是否是 空,是空,返回0.
3.整数运算符
-eq ; -ne ; -gt ; -lt ; -ge ; -le ; + - */ ;%求余数 **幂运算
a=`expr 2 + 10 `或 a = $((2+10)) 或 a = $[3+4];a=$[(1+2)*3]
let n=n+1 :let 不需要$
进制:数字前加0,为八进制;加0x为16进制。
4.文件操作符
test -a filename 或 【 -a filename 】;
-a 存在 ;
-b 文件存在且为块文件
-c 文件存在,且为字符文件
-d 文件存在,且为目录
-s 非空文件
-f 一般文件
-L连接 ;-r 可读;-x可执行
5.逻辑操作符
-a ;and ; -o ;or
6.其他;
<<左移; >>右移; &按位与; |按位或; ~按位非; ^按位异或;++自增; --自减
6.选择循环判断
if
多条件判断case:
case variable in:
value1)
statement1
statement2
...;
value2)
...
esac #####首位相顾
for var in 1 2 3 4
do
done
for var in {1 2 3 4}
for var in {1..8}
for var in {1..100..2}
for ((i=1;i<5;i++)) ##############;语句分割;
for var in ${array[*]}
until expression
do
done ######直到满足expression,退出循环,不再执行
循环删除用户
i=1
until [ $i -eq 21 ]
do
userdel -r user$i
ler "i++"
done
shell中没print,有printf=echo -n
可在一个主函数内调用多个其他函数。
传参:
1.
shift参数左移,同时删除第一个参数
2.getopt
fun(){
While getopts "a:b:c" arg
do
case
esac
done
}
fun -a opt01 -b opt02
3.间接传递参数
var=name
name=john
${name} =john
${var}=name
${!var} = john
4.传递数组参数
func(){
while [ $# -gt 0 ]
do
echo "$1"
shift
done
}
a=(a b "c" "d" e)
#调用
func "${a[@]}"
################################################################################3
数组
定义
a[]=value;
或declare -a array ,array[0]= ....
或a=(a b c d)
调用
echo "${array[@]}"
追加元素array[i]=value
for i in {1..10}
do
array[$i]=$i
done
echo "${array[@]}"
获取数组长度
${#array[@]} 或 ${#array[*]}
切片:
${array[@]:start:length}
数组元素的替换
${array[@]/pa/replacement} EG:${array[@]/3/10}:把3换成10
删除数组元素
unset array[n]
删除整个数组
unset array
复制数组
newarray=("${array[@]}")
连接数组
("${array1[@]}" "${array2[@]}")
加载文件内容到数组
content=(`cat "demo.txt"`)
for i in "${content[@]}"
do
echo "$i"
done