shell快速入门
$? 表示上一个命令退出的状态,0表示执行正常,不等于0表示执行不正常。 $$ 表示当前进程编号 $0 表示当前脚本名称 $# 表示参数的个数,常用于循环 $*和$@ 都表示参数列表 $n 表示n位置的输入参数(n代表数字,n>=1) 传递参数这个和c语言等是一样的。类似与下面这样。 ./test.sh 1 2 3 接受参数像下面这样处理 #分别表示第一个参数,第二个参数,第三个参数 inputfile1=$1 inputfile2=$2 inputfile3=$3
read:
#!/bin/bash read -p "请输入你的名字:" name echo $name
for循环
#下面这两种形式 #!/bin/bash for N in 1 2 3 do echo $N done for((i=1;i<=5;i++)) do echo "weclome $i" done
while循环
#!/bin/bash i=1 while((i<=5)) do echo "welcome $i" let i++ done
case匹配
#!/bin/bash case $1 in start) echo "starting" ;; stop) echo "stoping" ;; *) echo "没有匹配的" esac
if判断
#!/bin/bash read -p "请输入用户名" NAME printf '%s\n' $NAME if [ $NAME = root ] then echo "欢迎你 ${NAME}" elif [ $NAME = magic ] then echo "欢迎你,${NAME}" else echo "你是谁,滚犊子" fi
比较
# 字符串比较 -lt 小于 -le 小于等于 -eq 等于 -gt 大于 -ge 大于等于 -ne 不等于 -e 判断对象是否存在 -d 判断对象是否存在,并且为目录 -f 判断对象是否存在,并且为常规文件 -L 判断对象是否存在,并且为符号链接 -h 判断对象是否存在,并且为软链接 -s 判断对象是否存在,并且长度不为0 -r 判断对象是否存在,并且可读 -w 判断对象是否存在,并且可写 -x 判断对象是否存在,并且可执行 -O 判断对象是否存在,并且属于当前用户 -G 判断对象是否存在,并且属于当前用户组 -nt 判断file1是否比file2新 [ "/data/file1" -nt "/data/file2" ] -ot 判断file1是否比file2旧 [ "/data/file1" -ot "/data/file2" ]
字符串
#获取字符串长度 string="abcd"echo ${#string} #输出 4 #提取子字符串 #以下实例从字符串第 2 个字符开始截取 4 个字符: string="turtle is a great site"echo ${string:1:4} # 输出 le #查找子字符串 #查找字符 i 或 o 的位置(哪个字母先出现就计算哪个): string="runoob is a great site" echo `expr index "$string" io` # 输出 4
数组
(1)定义数组 #在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。 array_name=(value0 value1 value2 value3) (2)读取数组 读取数组元素值的一般格式是: ${数组名[下标]} 例如 valuen=${array_name[n]} #使用 @ 符号可以获取数组中的所有元素: echo ${array_name[@]} (3)获取数组的长度 获取数组长度的方法与获取字符串长度的方法相同,例如: # 取得数组元素的个数 length=${#array_name[@]} # 或者 length=${#array_name[*]}
函数
#!/bin/bash function print_msg { echo "Hello, World" } print_msg #或 print_msg() { echo "Hello, World" } print_msg
案例一
进度条:
#!/bin/sh b='' for ((i=0;$i<=100;i+=2)) do printf "progress:[%-50s]%d%%\r" $b $i sleep 0.1 b=#$b done echo [root@ngsocdev13 ~]# sh print200.sh progress:[##################################################]100%