- shell是一个命令执行器,作用是遵循一定的语法将输入的命令加以解释并传给系统,用户可以用shell来启动、挂起、停止甚至是编写一些程序。shell是用户和linux的桥梁,定义了各种变量和参数,并提供了很多在高阶语言中才具有的控制结构,包括循环和分支,虽然他不是内核的一部分,但是她调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行
- 本质上,shell就是命令行命令简单的组合到一个文件里面。
- 程序基础
- 必须在文件的第一行加 !#/bin/sh 告诉系统他后面的参数用来该文件的执行
- chmod +x filename,因为vim编辑过的文件并没有可执行的功能
- 变量
- 变量名=值 取变量值($){注意变量赋值时,=两边不能有空格},且所有结束语句都不用加分号
- 当num=2 $numnd 打印不了时,可以${num}nd来打印
- 默认变量
- $#:传入脚本的命令行参数个数(和c的区别,c的个数包括命令本身)
- $*:所有命令行参数值,在各个参数值间留有空格
- $0;命令本身
- $1:第一个命令行参数
- $2:第二个命令行参数
- 局部变量 在变量前加local(和C差不多)
- if 格式,
- -eq:相同
- -ne:不同
- -gt:大于
- -lt:小于
- -ge:大于或等于
- -le:小于或小于
- -z:为空
- -n:不为空
-
#!/bin/bash a=$1 b=$2 if [ -z $a ] || [ -z $b ] then echo "please enter 2 no" exit 1 fi if [ $a -eq $b ] ; then echo "number a = number b" else if [ $a -gt $b ] then echo "number a>number b" elif [ $a -lt $b ] then echo "number a<number b" fi fi
- -e 文件已存在 ;-f文件是普通文件 ;-s文件大小不为0 ;-d文件是一个目录 ;-r文件对当前用户可以读取;-w文件对当前用户可以写入 ;-x文件对当前用户可以执行
-
#!/bin/sh folder=/home [ -r "$folder" ] && echo "Can read $folder" [ -f "$folder" ] || echo "this is not file"
-
- for
-
#!/bin/bash for day in Sun Mon Tue Wed Thu Fri Sat do echo $day done
统计当前目录下的文件数
-
#!/bin/bash counter=0 for files in * do counter=`expr $counter + 1` done echo "There are $counter files in `pwd` we need to process"
-
- while
- 将用户输入的数字按倒叙方式输出
#!/bin/bash echo -n "Pleasw enter number : " read n sd=0 rev="" on=$n echo "$n" while [ $n -gt 0 ] do sd=$(( $n % 10 )) # get Remainder n=$(( $n / 10 )) # get next digit rev=$( echo $rev$sd) done echo "$on in a reverse order $rev"
- 将用户输入的数字按倒叙方式输出
- until
- 移动一个文件,如果目标位置存在文件,则监视该文件,直到文件被删除后才移动该文件
#!/bin/bash if [ "$1" = "" ] || [ "$2" = "" ] then echo "Please enter file name" exit 1 fi if [ -e $2 ] then echo "The file already exists" until [ ! -f $2 ] do sleep 1 done fi if [ ! `mv $1 $2` ] then echo "mv sucessful" else echo "mv error" fi
- 移动一个文件,如果目标位置存在文件,则监视该文件,直到文件被删除后才移动该文件
- case
-
#!/bin/bash echo "Hit a key, then hit return." read Keypress case "$Keypress" in [A-Z] ) echo "Uppercase letter";; [a-z] ) echo "Lowercase letter";; [0-9] ) echo "Digit";; * ) echo "Punctuation, whitespace, or other";; esac
-