[笔记]linux shell基础编程笔记

使用的环境是

fedora 18

由于是初学者有错误无法及时发现,欢迎指正.

内容很简单 

就是基本的变量的使用 基本的语句和函数的基本创建使用

2013/09/15

shell-->命令解析器 将用户输入的指令转换成相应的机器能够运行的程序

shell脚本

shell的第一行是(不过在fedora下测试..不加也没关系)

#!/bin/sh

#! 指定脚本文件的解析程序

增加运行

chmod +x filename
[cc@localhost shell_dir]$ ls /bin/sh -l
lrwxrwxrwx. 1 root root 4 1月  10 2013 /bin/sh -> bash

以#表示注释

变量:

不需要声明

a="hello world"
#输出a
echo "A is:"
echo $a

赋值不要$号 但要引用的时候需要加$

在字符串中使用时用{}括起来

echo "this is the ${a}nd"

默认变量:

  • $#:传入脚本的命令行参数个数
  • $*:传入的所有参数 中间用空格相隔 
  • $1:第一个命令行参数
  • $2:第二个命令行参数

2013/09/16

局部变量:

在shell中 变量首次被赋值时加上local关键字可以声明一个局部变量

hello="var1"
echo $hello

function func1(){
  #与全局冲突时使用local(不过最好都写吧 避免混淆)
  local hello="var2"
  echo $hello
}
func1
echo $hello

输出:

var1

var2

var1

变量赋值:

=(赋值号)左右两边不能有空格

BASH语句不需要分号

If语句:

 if [ expression ] 

   then

    #code block

 fi

 if [ expression ] 

    then

#code block

else

#code block

  fi

  

a=1
b=1
if [ $a = $b ]  #注意在[]和=留空
 then
  echo "${a}=${b}"
fi

 以下都要在其左右留空格

 比较操作 整数 字符串

   相同    -eq   =

   不同    -ne  !=

   大于    -gt   >

   小于    -lt   <

  大于等于 -ge

  小于等于 -le

   为空          -Z

   不为空        -n

-e 判断文件是否存在

-f 文件是普通文件

-s 文件大小不为零

-d 文件是一个目录

-r 文件对当前用户可以读取

-w 文件对当前用户可以写入

-x 文件对当前用户可以执行

用[  ]表示判断

例子:

folder=/cc
[ -r "${folder}" ] && echo "${folder} 可读"  #&&表示前面是真的就后面就运行
[ -f "${folder}" ] || echo "${folder}不是文件" #||表示哦前面的不是真就执行后面的

以上这两个其实就是短路操作 &&是短路与 当前面的是假的后面的就不用运行了

                           ||是短路或 当前面的是真的后面的不用运行了

for语句:

for var in [list]

 do

   #code block

 done   

例子:

for day in Sun Mon Tue Wed Thu Fri Sat
do
 echo $day
done

while循环:

while [ condition ]

do

 #code block

done

例子:

read count
echo "cout=${count}"
a=1
add=0
while [ $a -le $count ]
do
 add=`expr ${add} + ${a}`
 a=$(($a+1))
done
echo "add=${add}"

注意了 要进行数学运行 要用`expr 1 + 1`(注意+左右的空格) 或者使用$((算数表达式)) 这样+左右没必要留空

util循环:

util [ condition ]

do 

  #code block

done

和while循环相反 condition为假时执行

Case语句:

case "$var" in  #var可以是字符串 整数等等 限制比较小

  condition1 )

    ;;

  condition2 )

    ;;

  * ) statments;;

esac #和case相反的写法

例子:

echo 输入一个字符
read key
case "$key" in
 [A-Z] ) echo "输入的是大写字母";;
 [a-z] ) echo "输入的是小写字母";;
 [0-9] ) echo "输入的是数字";;
     * ) echo "输入的是其他字符";;
esac

  

  

函数:

要先定义 再被调用

bash中创建一个函数:

 fname(){

   

 }

 或者

 function fname(){

 }

 使用函数时:

 fname param1 param2 param3 ... 在函数内部视为位置参数处理

 没参数 就直接用 fname

 例子如下:

echo_all(){
 for i   #i读取参数列表的第一个
   do
    echo "$i"
    shift #左移操作 以下的参数 左移一位则1被消去 但实际中发现这句即使不写也可以
   done
}

echo_all  1 2 3 4 5 6 7 8 9 10

以上输出 

1

2

3

4

5

6

7

8

9

10

还有种方式:

echo_all(){
 for i in $*
   do
    echo "$i"
   done
}

echo_all  1 2 3 4 5 6 7 8 9 10

相关推荐