shell学习积累,循环,运算,判断

需要经常注意的问题

赋值不需要$,但读值必须不能忘了在变量前加上$

shift可以跳过参数,如shift 2,命令行输入aaa.sh a b c d 相当于命令行输入就变成aaa.sh c d


Shell 运算(+-\*/

expr 只对整数进行运算,且中间每一段都必须要用空格隔开

语法`expr integer1 + integer2`或者$(expr integer1 + integer2) 两个反引号``相当于$()

 shell学习积累,循环,运算,判断


let 数学运算

语法let “ckx=5+2”

 shell学习积累,循环,运算,判断

 

(())let运算

语法 ((ckx=5+2))

 shell学习积累,循环,运算,判断

 

$[] 运算

语法 ckx=$[1+1]

 shell学习积累,循环,运算,判断


bc浮点数运算 

[[email protected] ~]# ckx=$(echo 5.5+2|bc)
[[email protected] ~]# echo $ckx

7.5

[[email protected] ~]# echo $(echo "scale=2; 5.5 / 2"|bc)

2.75

scale=x;代表保留几位小数


awk浮点数运算

[[email protected] ~]# awk 'BEGIN{printf "%f\n",('$ckx' / 2)}'
2.750000
[[email protected] ~]# awk 'BEGIN{printf "%f\n",(5.5 / 2)}'
2.750000


Shell 流程控制(+-\*/

If语句

 shell学习积累,循环,运算,判断

注意if后有空格,[ ]里每段都要有空格

 

test判断语句

语法 test expression 或者 [ expression ]

 shell学习积累,循环,运算,判断

常用判断

-d 是否为目录 -e 是否为文件 -f 是否为普通文件 -r 是否可读 -w 是否可写 -x 是否可执行 -z 是否为空 -n 是否不为空

 

注:经常看到类似 if [[ $ckx = $ckx2 ]]双中括号语句,是为了防止没有值的情况程序不能继续运行,如果没有赋值,这个语句为假,程序会继续往下运行。

 

case语句

语法 

case word in

模式) 声明;;

esac

 shell学习积累,循环,运算,判断

 

while循环语句

语法:

while [ test ] ;do

.....

done

 shell学习积累,循环,运算,判断

注:循环语句中使用timeout命令可以防止死循环,用法 timeout 秒数 命令

 

for 循环语句 

语法:

for 变量 in ... ;do

...

done

能够遍历in后面的所有数据

 shell学习积累,循环,运算,判断

shell学习积累,循环,运算,判断

 

自定义函数

语法 

函数名()

{

...

}

 shell学习积累,循环,运算,判断

注:[email protected]是列出所有输入参数 $#是代表参数个数

 

两种按行读取文本的方法

 shell学习积累,循环,运算,判断


printf格式化输出

 shell学习积累,循环,运算,判断

 

 

 

小技巧:

1sh -x 文件名可以看到每个命令的运行步骤和结果

 shell学习积累,循环,运算,判断

 

2、包含其他shell文本或其他文件,在#!/bin/sh下面用 文件路径 或者 source 文件路径即可包含进来

 shell学习积累,循环,运算,判断