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
' $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%%
" $b $i  
        sleep 0.1  
        b=#$b  
done  
echo 


[root@ngsocdev13 ~]# sh print200.sh 
progress:[##################################################]100%

  

 

原文地址:https://www.cnblogs.com/shwang/p/11821396.html