bash基础,gitbash


 

1           概念

bash(sh,pdsh扩充): GNU Bourne-Again Shell

 

sh:Bourne Shell,编程优秀,用户交互不便。         

csh:C Shell,编程接口不如sh,用户界面友好,与C语言语法相似。      ——>tcsh

ksh:Korn Shell,集成了sh和csh的优点,并完全兼容sh。               ——>pdsh(Public Domain Korn Shell)

zsh

 

2           语法

2.1         变量,数据类型

变量定义:不含保留字(例如“-,*”等),不含空格。

变量的引用:赋值,for循环前不需带$;其他情况引用变量需要带"$"(例如,打印,运算等)。

数据类型:shell变量没有数据类型。

shell语句:=左右不能有空格;shell语句不以”;“结尾。

                                                                                                

2.1.1        整数运算(+-*/%):let,expr

1)let:双引号

例如,let "x=$x+1"

2)expr:`,空格,特殊字符前需要使用转义符号\

例如,x=`expr $x + 4`,x=`expr $x \* 4`

【PS】不能进行浮点数运算,没有浮点数数据类型。

【例子:算术运算,字符拼接,shell的无数据类型】

#!/bin/bash

x=2007

let "x=$x+1"

echo $x

 

x=`expr $x + 4`

echo $x

echo $(expr $x / 2)

x='Olmpic'$x

echo x=$x

 

y=12

y=`expr $y \* 2`

echo $y

 

2.1.2        赋值

x=200

let "x=$x+1"

x=’hello’$x

y=$(expr $x / 2)

y=`expr $y \* 2`

 

result=$(($result+$num))

num=$((num+1))

 

2.1.3        比较操作      

1)-eq,-ne,-gt和-ge,-lt和-le,-z(为空),-n(非空)

2)=,!=,>(无>=),<(无<=)

【PS】

字符串比较时,尽量不用-z,而用!-n代替。

能用1)尽量不用2)。

 

2.1.4        按位操作

&,|

【位运算:】

ckm@bidc:~/zzhTest> echo $(expr 1 \& 0)

0

ckm@bidc:~/zzhTest> echo $(expr 1 \| 0)

1

#!/bibn/bash

if [ $str !-n ];then

echo null!!

fi

 

2.2         流程控制

2.2.1        if条件控制

if [ expression ] ;then statements

fi

 

if [ expression ] ;then statements

else   statements

fi

 

if [ expression ] ;then statements

else if  [ expression ] then statements

else  statements

fi

 

if [ expression ] ;then statements

elif  [ expression ] ;then statements

else  statements

fi

【PS】

若then换行,则then前无需加;。

[和]的后、前有空格。

 

2.2.2        case分支结构

case "$var" in

cindition1 ) statements;;

cindition2 ) statements;;

...

* ) statements;;

esac

 

 

 

2.2.3        for循环

for var in [ list ];do

 statements

done

【PS】

var 变量的引用不使用$。

<list>的元素用空格分隔。

           

 

2.2.4        while循环

while [ condition ]

do

statements

done

 

 

2.2.5        until循环

until [ condition ]

do

statements

done

 

 

2.2.6        break/continue

 

3           bash脚本例子

【hello world】脚本的执行:hello

#!/bin/bash

#变量的使用

str='hello world'

echo $str

echo str

 

--执行文件

bash hello

sh hello

chmod u+x hello

hello

 

【Linux常用命令】

vi zzhdir

#!/bin/bash

ls –a

--执行

sh zzhdir

 

【局部变量:局部变量的作用域(函数体内)】

#!/bin/bash

function test {

local var=world

echo $var

}

 

var=hello

 

echo $var

test

echo $var

【PS】局部变量:首次被赋值时,变量前面加上local。

 

【if条件:比较操作,if条件控制结构】

#!/bin/bash

a=10

if [ $a -gt 0 ]

then echo 1

else echo 2

fi

 

【if条件:带参脚本】

#!/bin/bash

if [ $1 = 10 ];then echo right!

else echo wrong!

fi

--执行

sh test 123

【PS】$1用于匹配命令行的第1个参数。(bash中的保留字)

 

【case分支】

var=12

case "$var" in

[a-z] ) echo 'lowercase letter!';;

[0-9] ) echo 'number';;

* ) echo other character!;;

esac

 

【for循环:无in [list]】

for var ;do

 echo ok

done

--执行

sh test

sh test 1  "hello world" a

 

【for循环:i的作用域】循环体内部(do/done之间)

for i in $(seq 5)

do

echo $i

done

 

echo $i

--执行

sh test

 

【for循环:seq】

for i in `seq 1 5`;do

echo TEST!

done

 

【for循环:i的作用域】定义后的程序块

for((i=1;i<=5;i++));do

echo $i

done

                                            

echo $i

--执行

sh test

 

【for循环:命令行参数】。

for param

do

echo $param

done

--执行脚本

sh test 123 456 789

【PS】未指定list,将打印所有命令行参数;当没有命令行参数时,什么都不打印

 

【while循环】

num=1

result=0

while [ $num -le 3 ]

do

result=$(($result+$num))

num=$((num+1))

done

 

echo $result

 

【until循环】

num=1

result=0

until [ $num -ge 3 ]

do

result=$(($result+$num))

num=$((num+1))

done

 

echo $result

 

【break/continue】

for i in `seq 1 5`;do

if [ $i = 3 ];the

continue

else echo $i

fi

done

 

 

4           Vi编辑器

命名模式:Esc键,“:”英文冒号,“wq”保存退出,“q!”强制退出

插入模式:aAiIuU

删除单词:dw

删除整行:dd

字符串查找:“/”正斜杠

 

5           相关拓展

保留字

正则

函数

输入,输出: >,>>,>2,>1,>&

For循环

变量的作用:整数,字符串,计数,文件属性

 

 

次元立方

 


[bash]$ 什意思?

就是个提示符,bash是shell脚本中得一种。linux中,$代码普通用户,#代表root用户。
都是linux基础,学学吧。
 

对于Linux ,Bash ,Shell的概念问题

1.是
2.区别大,你会写bash shell不代表你会写c shell,不过我觉得你会写一个shell脚本
另一种你上手也很快,起码读懂应该问题不大。你可以先学bash shell因为用的比较多
而且可移植性强,bash 是shell的一种。
3.属于shell,只安装了bash shell就可以运行bash shell脚本,并不是针对某个系统或者发行版本。
shell这种东西可以随意安装的。你用习惯哪个shell,就算初装系统里没有,你也可以单独安装一个
4.给你推荐两本书
《Bash shell高级脚本指南》
《实战LINUX+SHELL编程与服务器管》

shell编程,可以说直接反应出你对linux命令掌握的熟练度问题,什么情况下用哪种命令更符合
你的工作需求,怎么简化脚本运行过程,优化脚本让它更有效率。
你在学习过程中必然会接触到sed,awk这种流编辑器。然后你还得学习sed,awk。
渐渐地估计你就该选择一门更强大的编程语言,而不仅限于写shell脚本,比如选perl.python,php.
C,或者什么语言...基本上都是这个过程。
 

相关内容