变量
定义:
环境变量
export varname=value
unset var
用unset命令可以删除已定义的环境变量或本地变量。
引用变量 ${varname}或 $varname
语句以换行或;结尾
执行命令 `cmd`;也可以$(cmd); 返回执行后输出的字符串
位置变量 $0 程序的名称 $1 第一个参数 以此类推
$* 所有的参数 $# 参数数量
算术计算
$(()) 例如
var=45echo $(($VAR+3));
$(())中只能用+-*/和()运算符,并且只能做整数运算。
var1=1
var2=2
let sum=var1+var2
自加操作
let no1++
自减操作
let no1--
操作符[]的使用方法和let命令类似:
result=$[ no1 + no2 ]
expr同样可以用于基本算数操作:
result=`expr 3 + 4`
result=$(expr $no1 + 5)
以上这些方法只能用于整数运算,而不支持浮点数。
5)使用bc(可以进行浮点数计算)
var=1
var=`echo "$var+1.2"|bc`
echo $var
输出结果为2.2
n 计算平方以及平方根:
echo "sqrt(100)" | bc #Square root
echo "10^10" | bc #Square
6) 用awk命令计算
var=`echo 5 6.6 | awk '{print $1*$2 }'`
字符串操作
字符串操作
${var:=DEFAULT} 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 *
${#string} $string的长度
${string:position:length} 在$string中, 从位置position开始提取长度为length的子串
例如
string=1234567890
p=2
l=5
echo ${string:p:l} 将输出 34567
${string/substring/replacement} 使用$replacement, 来代替第一个匹配的$substring
${string/substring/replacement} 使用replacement, 代替第一个匹配的substring
${string//substring/replacement} 使用replacement, 代替所有匹配的substring
另外可以调用外部命令如awk sed grep来处理字符串
流程控制
if [ condition ] && [ condition ] ;then
cmd
elif [ condition ] || [ condition ] ;then
cmd
else
cmd
fi
if语句内判断参数
-f 当file存在并且是正规文件时返回真
-s 当file存在文件大小大于0时返回真
-b 当file存在并且是块文件时返回真
-c 当file存在并且是字符文件时返回真
-d 当pathname存在并且是一个目录时返回真
-e 当pathname指定的文件或目录存在时返回真
-g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
-h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
-p 当file存在并且是命令管道时返回为真
-r 当由pathname指定的文件或目录存在并且可读时返回为真
-u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
-w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
Shell 里面比较字符写法:
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于
-z 空串
= 两个字符相等
!= 两个字符不等
-n 非空串
! 将条件取反
case 语句
echo "input : "
read num
echo "the input data is $num"
case $num in
1) echo "January";; 双分号结束
2) echo "Feburary";;
5) echo "may" 每个case可以有多条命令
echo "sdfd"
echo "sdf";; 但最后一条命令一定是双分号结束
6 | 7)
echo '6 or 7';;
*) echo "not correct input";; *)是其他值、default的意思
esac
for循环
1、 for((i=1;i<=10;i++));do echo $i; done
2、在shell中常用的是 for i in $(seq 10) do ..... done seq 打印从1到10的数
5、for i in $* ; do ..... done
9、for i in $(ls *.txt) do ..... done
while [ condition ]
do
cmd
done
until [ condition ]
do
命令序列
done
还可以这样
while true
do
if [ condiction ]
then
break
fi
done
当然还支持 continue;
函数
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
3、必须在调用函数地方之前,声明函数.
4. shell中函数,是定义一个新的命令,它是命令,因此 各个输入参数直接用空格分隔。函数值通过$?获得
5,载入外部的函数 ./pathname/filename;将外部函数载入到当前shell环境 source path/filename