菜鸟linux shell基础


1、shell脚本的命名:  ****.sh

      注释:# this  is  comment

               #!/bin/bash  注意这句不是注释

2、变量

1)、自定义变量:name=zhy

获取变量:#echo  $name   echo $PATH

2)、解析变量{}

用{}将变量括起来会让系统知道括号中的是一个变量,类似php

     name=lisi

       Echo {$name} hello

 

3) 、作用域:

a)        对于普通的变量来说它的作用域只在与当前的层,如果想设置一个变量为全局的变量如下:export关键字设置全局变量

不用export定义的变量只对该shell有效,对子shell也是无效的。export用于bash环境

export name=lisi

 

保存linux中的所有的shell目录

#/etc/shells

 

手动开启shell

#/bin/bash

 

获取shell的层级

#echo  $SHLVL

 

3、输入输出

   >  >>   输出

   <  <<  输入

   <<:制定终止的符号

  #cat  < &0  表示接受来自键盘的输入

  #cat  < file  表示接受来自文件的输入

 

输入输出描述符:

  输入:键盘      0

  输出:屏幕      1

  错误输出:      2

 

    在linux中 /dev/null----虚拟出来的一个字符设备,它可以将你产生的错误回收处理,可以将产生的错误信息输入到该文件,不输出到屏幕上

 

 

cat<<END

表示在输入时直到出现END输入自动结束

cat<<END  >file

例:

向file文件输入内容,直到输入END退出

 

read变量值的分配

read  a  b

1 2 3 

这时$a = 1   $b=2 3

read  a b  c

1 2 

这时$a = 1   $b=2  $c=””

 

每个声明的变量会以你输入的值的中间的空格一个一个的分配给声明的变量,

直到最后一个无论剩下几个值都给将他们拼合到一起给最后一个变量

 

 

可作为条件判断的一个变量 $?

$?------表示显示最近一条命令的执行状态

退出状态0:表示成功

退出状态1:表示失败

#ls –l 

#echo $?     0

#LS –l

#echo $?     1

 

 

$#:参数的总的数量

$*:显示所有参数

$1……$9  这里只能到$9 $10是不存在的等于$1  如果想看到$10的值就需要shift了

shift  [n]:将参数向前移n位

默认不加参数会执行一次向前移动一位

看下面两个例题;

 

1)、Shell脚本

Vi/home/file1.sh

#!/bin/bash

echo"$#:"$#

echo '$*:'$*

echo '$1:'$1

echo"$9:"$9

 

调用脚本

Vi  /home/file2.sh  a b c d e f h j

$#   9

$*   a b c d e f h j

$1   a

$2   b

.......

$9

 

 

 

     2)、 Shell脚本

while ["$#" -gt 0 ]
do
echo $*
shift
done

调用
$ test  1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
2 3 4 5 6 7 8 9 0
3 4 5 6 7 8 9 0
4 5 6 7 8 9 0
5 6 7 8 9 0
6 7 8 9 0
7 8 9 0
8 9 0
9 0
0

 

 

 

4、测试命令[]和test

         test  操作数1   操作符    操作数2

         test  1>2

 

参数:

         -a  相当于and

         -o  相当于or

测试命令分类

         (1)数值类型数据比较

int1 -eq int2 如果 int1 等于 int2,则为真
int1 -ge int2 如果 int1 大于或等于 int2,则为真
int1 -gt int2 如果 int1 大于 int2,则为真
int1 -le int2 如果 int1 小于或等于 int2,则为真
int1 -lt int2 如果 int1 小于 int2,则为真
int1 -ne int2 如果 int1 不等于 int2,则为真

                (2)字符串类型数据比较

String   如果string的长度不为零则值为true

-z string  如果string的长度为零则值为true

Str1=str2  如果str1和str2的长度相等为true

Str1!=str2  如果str1和str2的长度不相等为true

            (3)文件类型数据比较

-b file 如果文件为一个块特殊文件,则为真
-c file 如果文件为一个字符特殊文件,则为真
-d file 如果文件为一个目录,则为真
-e file 如果文件存在,则为真
-f file 如果文件为一个普通文件,则为真
-g file 如果设置了文件的 SGID 位,则为真
-G file 如果文件存在且归该组所有,则为真
-k file 如果设置了文件的粘着位,则为真
-O file 如果文件存在并且归该用户所有,则为真
-p file 如果文件为一个命名管道,则为真
-r file 如果文件可读,则为真
-s file 如果文件的长度不为零,则为真
-S file 如果文件为一个套接字特殊文件,则为真
-t fd 如果 fd 是一个与终端相连的打开的文件描述符(fd 默认为 1),则为真
-u file 如果设置了文件的 SUID 位,则为真
-w file 如果文件可写,则为真
-x file 如果文件可执行,则为真

        

 

[ ] 命令  [ -f  file1 ] 注意中括号中括号前后加空格

 

 

5、计算

  expr  表达式 

expr 3  \*  3正确,数值与表达式要分开,表达式要转义

expr 3\*3 错误

  $((…..))  echo  $((3*3))  

需要echo,否则报错bash: 9: command not found

 

         

6、流程控制结构

If:

  If  条件

  Then

     执行命令

  Elif  条件

  Then

     。。。

  Else

   。。。

 

 

Case语句

 语法

  Case   值  in

  模式1|模式3)   1)     1|2|3)

      命令1

      。。。

      。。。。

       ;;

  模式2)

      

  Esac

提醒:模式里可以使用通配符

 

 

for循环

 语法:

 for  变量名 in 列表

  do

    命令1

     。。。

 done

 

 

until

  until  条件

  do  

命令。。。。。

  done

 

 

while

 while  条件

  do

     命令

 done

 

break:终止当前循环

contine:终止当前次循环

 

 

 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值