shell最基础的笔记

来源:互联网 发布:网络管理软件应用 编辑:程序博客网 时间:2024/06/16 06:28
注意:“=”左右两边都不能有空格,BASH中的语句结尾不需要分号程序1#!/bin/sh#echo somethingecho "hello world"echo "hello !!"cd /root/Desktopmkdir ./abc程序2,变量不需要类型,也不需要定义,使用的时候加上$,赋值的时候不用#!/bin/sh#set variable aa="hello world"#print aecho "A is:"echo $a如果是在字符串中如何输出变量num=2echo "this is the ${num}nd"会变成this is the 2nd重要提示:$#传入脚本的命令行的参数个数$*所有命令行的参数值(空格隔开)$#命令本身(shell文件名)$1第一个命令行参数$n第n个命令行参数程序3s3中#!/bin/shecho "number of vars:" $#echo "values of vars" $*echo "value of var1"$1echo "value of var2"$2echo "value of var3"$3echo "value of var4"$4终端中运行并输入 ./s3 1 2 3 4得到的输出是number of vars:4values of vars:1 2 3 4 value of var1:1value of var2:2value of var3:3value of var4:4局部变量在变量首次被赋值的时候加上local关键字可以声明一个局部变量,例:s4#!/bin/bashhello="var1"echo $hellofunction func1(){local hello="var2"echo $hello}func1echo $hello运行./s4得到var1var2var3!!!!如果去掉local,上面的程序将输出vr1,vr2,vr2IF语句格式:if [expression]then#code blockfi或者if [expression]then #code blockelse #code blockfi或者多重ifif [expression]then #code blockelse if [expression]then #code blockelse #code blockfififi#每个if对应一个fi比较:比较操作整数操作字符串操作相同-eq=不同-ne!=大于-gt>小于-lt<大于或等于-ge小于或等于-le为空-z不为空-neg:注意“[“”]“符号的左右都留有空格,“=”左右都有空格比较整数a和b是否相等 if [ $a = $b ]  (也可以用-eq)判断整数a是否大于整数bif [ $a -gt $b ] 比较字符串a和b是否相等if [ $a = $b ] 判断字符串a是否为空if [ -z $a ] 判断整数变量a是否大于bif [ $a -gt $b ] 判断:-e文件已经存在-f文件是普通文件-s文件大小不为零-d文件是个目录-r文件或目录对当前用户可以读取-w文件或目录对当前用户可以写入-x文件或目录对当前用户可移植性程序5#!/bin/shfolder=/home [ -r "$folder" ] && echo "Can read $folder"(当前面的判断成立,执行&&后的) [ -f "$folder" ]    ||echo "this is not file"(判断为假执行||后的语句) 由于folder是个目录,可读,故不输出第一条语句 由于folder是个目录,不算文件,故输出第二条语句   For循环 格式: for var in [list] do #code block done 其中$var是个循环控制变量,[list]是var需要遍历的一个集合,do/done对包含了循环体,相当于C语言的大括号。另外如果do和for被写在同一行,必须在do前面加上“;”。 如:for $var in [list] ; do  程序s6 #!/bin/bash for day in Sun Mon Tue Wed Thu Fri Sat do echo $day done  程序s8:如果列表被包含在一对双引号内,则被认为是一个元素,在这里只运行一次。 #!/bin/bash for day in "Sun Mon Tue Wed Thu Fri Sat" do  echo $day done 注意:for所在的那一行变量名前面不加 $,因为这是赋值的过程 ,而在循环体里面,echo所在行的变量是必须加上$符号的。  while循环 while [ condition ]  do #code block done  until循环 until [ condition ] do  #code block done  while 和 until 的区别在于 while 是为真的时候执行,而until 是为假的时候执行。 case语句:bash 中的 case 结构和C语言的 switch 语句功能类似,可以进行多选项分支控制。case "$var" incondition1 ) ;;condition2 ) ;;*)default statments;;esac程序s7#!/bin/bashecho "Hit a key,then hit return."read Keypresscase "$Keypress" in[A - Z] ) echo "Uppercase Letter";;[a - z] ) echo "Lowercase Letter";;[0 - 9] ) echo "Digit";;*) echo"Punctuation,whitespace,or other";;esac特殊:if [ -z $a ] || [ -z $b ]或者exit 1错误退出,在if中可以省略firead Keypress读入一行