Shell学习笔记

1.shell脚本的特点

(1)shell是一种弱类型语言

(2)shell是一门解释型语言

(3)shell没有数据类型(结构体),所以类型可以直接使用,不用先定义再使用,需要注意二义性

(4)非编译

2.shell脚本的执行方式
(1)直接执行脚本./pid.sh
     首先赋予chomd u+x pid.sh  //只授予这个文件所属组的执行权限
     然后就可以./pid.sh

(2)source命令
     作用:不产生新shell,忽略脚本的权限,在当前环境下直接执行脚本。
     source由于不产生新shell,第一种会产生新的shell
     执行结果会影响当前的shell,所以我们经常使用source来设置当前的shell环境

#!/bin/bash
       echo $$ #获得当前bash的进程号

运行时的结果:
Shell学习笔记_第1张图片

3.shell语句的条件判断
(1)如何判断大小
#:整数比较
  -eq  判断相等         -ne  判断不相等   
  -gt  大于            -ge大于等于   
  -lt  小于            -le小于等于
#:字符串比较
     ==      !=      =   
	 字符串比较建议两端加""    或者 -z

(2)if/then/else /elif/else
if[ command ]; then   #[]表示条件测试,特别注意在 '['的后面和']'的前面要加上空格
符合该条件执行的语句
elif[ command ]; then #记住和C语言的else if区别开来
符合该条件执行的语句
else
符合该条件执行的语句
fi	
#最后不要忘了if和fi要配套使用类似C语言中一个作用域的意思

测试脚本
#!/bin/bash   
#a=0  #shell的注释符为#,因为shell为弱类型,所以不用指定变量的类型
#a=1
a=-1
if [ $a -eq 0 ];then
    echo "a=0"
elif [ $a -lt 0 ];then
    echo "a<0"
else 
    echo "a>0"
fi

测试用例:
Shell学习笔记_第2张图片

4.循环语句

(1)for/do/done
for 变量 in 列表
do
循环体
done
for命令会遍历列表中的每一个值,并且在遍历完成后退出循环。
或者
for ((...; ...; ...;))#直接类C风格的循环语句,简单粗暴

测试脚本
#!/bin/bash
echo "遵循shell语法版本"
for i in {1..4}
do
    echo "val is : $i"
done  


echo "类C风格版本"
for ((i=1;i<=4;i++))
do
    echo "val is : $i"
done

测试结果
Shell学习笔记_第3张图片

(2)while/do/done

while和C语言学的差不多,只要条件成立就执行循环体

测试代码:
#!/bin/bash
val=5
while [ $val -lt 7 ] 
do
    echo "val is: $val"
   #  val=$(($val+1)) #或者写成下面这种形式
    let val++ 
done

运行结果:
Shell学习笔记_第4张图片

(3)until/do/done

注意until的条件是满足就不运行,不满足就一直运行
#!/bin/bash
val=5
until [ $val -eq 10 ]
do
    echo "val is: $val"
    val=$(($val+1)) #或者写成下面这种形式
   # let val++ 
done


附:
shell中变量自增的几种方法
1. let i += 1;
2. ((i++));
3. i = $[$i + 1];
4. i = $(($i + 1))


5.数组

数组的测试用例:
#!/bin/bash
arr=(0 1 2 3 4)  #定义一个数组 数组名=(值1 值2 值3 ... 值n)
#或者
a[0]=12
a[1]=23
a[2]=34
echo "读取arr数组第一个元素"
echo ${arr[0]} #读取数组采用${数组名[下标]}
echo "读取a数组中的所有元素"
echo "${a[@]}" #使用@符号可以获取数组的所有元素
echo "改变a数组的第三个位置数据的值"
a[2]=13
for ((i=0;i<${#a[@]};i++))
do
    echo "a[$i]=${a[$i]}"
done
echo "获得arr数组长度的两种方法"
echo "length=${#arr[@]}"
echo "length=${#arr[*]}"

测试结果:

Shell学习笔记_第5张图片

6.Shell脚本实现Hill排序的过程


#!/bin/bash
arr=(0 8 9 7 4 5 -1)
n=${#arr[@]}
echo "未经过Hill排序的数组"
for ((k=0;k= 0; end=end-gap))
                do  
                    if [ $temp -gt ${arr[$end]} ]
                    then
                        break
                    else
                        arr[$end+$gap]=${arr[$end]}
                    fi
                done
                arr[$end+$gap]=$temp
        done
done
j=0
echo "经过Hil排序之后的数组形式"
while [ $j -lt ${#arr[@]} ]
do
    echo "arr[$j]=${arr[$j]}"
       let j++
done

测试结果:

Shell学习笔记_第6张图片






你可能感兴趣的:(Linux,Shell脚本实现Hill排序,Shell脚本的循环语句,Shell脚本的条件控制,Shell数组的基本操作,shell)