Shell学习笔记

来源:互联网 发布:网络语言酱紫什么意思 编辑:程序博客网 时间:2024/05/20 00:16

Shell学习笔记

Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。Shell既是一种命令语言,又是一种程序设计语言。

Shell 有两种执行的方式:
- 交互式:解释执行用户的命令,用户输入一条命令,Shell就执行一条命令。
- 批处理:用户事先写好一个Shell脚本,其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条的敲入。

第一个shell脚本:

  #!/bin/bash   //告诉系统用那一种Shell来执行    echo "hello world!"

当完成编写后保存文件为.sh文件(建议用vim编写),
第二步:需要修改文件的权限为可执行权限。

chmod +x ./***.sh  //进入到文件所在位置,添加可执行权限,/***.sh    //执行脚本sh  ***.sh   //执行脚本

第二个脚本将解释输入:

   #!/bin/bash    echo "what is you name?"    read pname    //使用read命令从stdin中读取字符串并且将其赋值给pname    echo "hello,$pname"

shell中的变量

(1)变量的定义

pname="张三"url="www.baidu.com"num=10

shell脚本中定义变量时变量名不需要加($)

(2)变量的使用
使用一个已经定义过的变量需要在变量名前面加上$

name="zhangsan"echo $name

有些时候为了能够将变量名和字符串分开需要{}来区分

echo "my name is ${name}."

(3)只读变量
shell中支持只读变量的定义。

age=14readonly age

如果在下文再对age赋值则运行时会出错。

(4)变量的删除

unset variable_name

变量被删除后不能再次使用;但是unset命令不能删除只读变量。
运行shell时,会同时存在三种变量:
1) 局部变量

局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量

所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量

shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

特殊变量列表
变量 含义
0n传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是12。
# 传递给脚本或函数的参数个数。* 传递给脚本或函数的所有参数。
@("")* 稍有不同,下面将会讲到。
?退$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

shell数组

bash支持一维数组,没有限定数组的大小。用空格区分数组元素

array_name(v1 v2 ...vn)

也可以写成如下形式:

array_name=(v1v2v3v4)
array_name[0]=value0array_name[1]=value1array_name[2]=value2

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

# 取得数组元素的个数length=${#array_name[@]}# 或者length=${#array_name[*]}# 取得数组单个元素的长度lengthn=${#array_name[n]}

shell if-else语句

与C语言相比shell中的if-else中添加了then,then后面的语句将会被执行,此外每一个if还必须要一个fi来闭合如:

#!/bin/sha=10b=20if [ $a == $b ]then   echo "a is equal to b"fiif [ $a != $b ]then   echo "a is not equal to b"fi

同理if-else语句也一样:

#!/bin/sha=10b=20if [ $a == $b ]then   echo "a is equal to b"else   echo "a is not equal to b"fi

if … elif … fi 语句

#!/bin/sha=10b=20if [ $a == $b ]then   echo "a is equal to b"elif [ $a -gt $b ]then   echo "a is greater than b"elif [ $a -lt $b ]then   echo "a is less than b"else   echo "None of the condition met"fi

shell中的case-esac

case … esac 与其他语言中的 switch … case 语句类似,是一种多分枝选择结构。
用法如下:

echo 'Input a number between 1 to 4'echo 'Your number is:\c'read aNumcase $aNum in    1)  echo 'You select 1'    ;;    2)  echo 'You select 2'    ;;    3)  echo 'You select 3'    ;;    4)  echo 'You select 4'    ;;    *)  echo 'You do not select a number between 1 to 4'    ;;esac   //与if语句相似,需要用esac语句将其闭合

shell中的for循环

shell中的for循环格式为:

for loop in 1 2 3 4 5do    echo "The value is: $loop"done

显示主目录下.bash开头的文件:

#!/bin/bashfor FILE in $HOME/.bash*do   echo $FILEdone

shell- while循环

COUNTER=0while [ $COUNTER -lt 5 ]do    COUNTER='expr $COUNTER+1'    echo $COUNTERdone

shell中的until循环

#!/bin/basha=0until [ ! $a -lt 10 ]do   echo $a   a=`expr $a + 1`done
0 0
原创粉丝点击