shell

(cd..;ls)当前目录下操作打印上层命令

Linux默认配置文件.bashrc

shell 中的:表示全部为真

【shell命令】

  1. 外部命令:依赖path环境变量。修改PATH= ,然后source .bashrc让修改生效那么外部命令ls,date,ps 等就会执行失败。
  2. 内建命令:不依赖path环境变量,即使修改path也不会影响执行。例如:echo pwd等

【shell文件与执行】

  1. 指定解析器 #!/bin/bash
  2. ./shell文件名 或者 . shell文件名

【shell语法】

  1. 数据类型:字符串string
  2. 变量定义:

         环境变量(类似全局变量)

         本地变量(类似局部变量)

        变量名建议大写,变量定义全是字符串(默认),并且符号间不需要空格。也不需要为字符串添加单引号。例如VAR=10,变量默认是本地变量。export VAR将本地变量变为环境变量

         env |grep VAR 过滤变量

         env |grep $VAR 取变量名对应的值

         删除变量(取消环境变量权限)unset。例如unset VAR

3. 代换:

【命令代换】

(1)文件名代换符Globbing

         *匹配0个或者多个任意字符

         ?匹配一个字符

         [若干字符] 匹配方括号中的任意一个字符的出现

        Globbing 是在shell下展开的,传给程序的文件应该是执行过匹配之后的结果,比如ls ch?.txt 匹配到三个文件,那么程序将接收到3个文件

         命令代换(反引号~ )

         VAR=$(data) 或者VAR=~data~  然后echo VAR

(2)变量的取值

         $变量名:取变量的值(不推荐)

         ${变量名}:取变量的值(推荐)

         $(命令):取命令的执行结果

【算数代换】

(1)算数代换(())

         VAR=10然后echo $((VAR+5))或者$[VAR+5]或者$((${VAR}+5))

(2)变量取值

         $((变量名))或者$[变量名]: 对变量执行算术运算

         $[base#n]:base表示进制,n按照base进制解释,后面再有运算数,按照十进制解释。

4. 转义字符

    字符转义:\  --  转特殊意义或者本身意义

5. 引号

    单引号:就是字符串打印

    双引号:字符串打印,也可以定义变量VAR=~data~ àecho “${VAR}”,在取变量值时都加“”,尤其是在测试条件中的时候

6. 控制语句:

  If—else  switch—case   for   while

【条件测试】

   整数判别符:整数或者取值为整数的变量 :-eq等于 -ne不等于 -lt小于 -le小于等于 -gt大于 -ge大于等于

   类型判断:-d 目录 –f文件 –p管道 –l软连接 –c字符串设备 –b 块设备 –s socket

  字符串长度判断,

  -z string 空字符串(长度0)

  -n 非空字符串(长度非0)

  字符串判等:字符串判等只能用=或者!=;a逻辑与 –o逻辑或 !逻辑非

【if分支】

  1. Shell的分号代表一行结束,也可以不加直接写在下一行
  2. read 相当于定义了一个起到缓存数据作用的变量,shell执行到read之后会等待用户输入,然后可以将结果带入条件判断。例如:

         read YES_OR_NO

         If [“YES_OR_NO”=‘yes’]; then

            执行逻辑

          elif[“YES_OR_NO”=’no’ ];then

            执行逻辑

            else

               执行逻辑

         Fi

例如:

vim text.sh

进入文件编写

#! /bin/bash

If [-f text.sh];then

  echo ‘ssss’

fi

【case分支】

;;两个分号类似于break,防止case穿透

例如:read YES_NO

case “YES_NO” in

YES|Y|yue)

  执行逻辑;;

[nN][oO])

  执行逻辑;;

*)      #这个相当于其他语言的default

  执行逻辑;;

esac

【for循环】

#! /bin/sh

for TEST in ~ls~;do

  执行逻辑

done

【while循环】

#! /bin/bash

read passwd

count=1

while [“${passwd}”=’test’ –a “${count}” –lt 10]; do

  $count=$[count+1]

  echo ‘see you again ’

  read passwd

done

7. 位置参数

$0 当前脚本的文件名

$n 传递给脚本或者函数的参数,n是一个数字,表示第几个参数,$1是第一个参数

$# 传递给脚本或者函数的参数个数

$* 传递给脚本或函数的所有参数,但他不取$0

$@ 表示参数列表,一般用在for循环中

$$ 当前shell进程ID

$? 上一个命令的退出状态,或者函数的返回值

shift 左移,命令行参数

【输入输出】

echo 默认跟换行 –e 表示解析转义 –n 表示不回车换行

printf

【管道】

可以通过|管道把一个命令的输出传递给另一个命令做输入

【tee】把结果作为标准输出,副本存储到相应的文件中

ps aux|grep bash |tee out.txt

【重定向】

cmd>file 把标准输出重定向到新文件中

cmd>>file 追加

cmd>file 2>&1 标准出错也重定向到1所指的文件中

0标准输入 1标准输出 2标准出错(无缓冲)

全缓冲(文件) 行缓冲(printf)

cmd>>file 2>&1

cmd<file1 >file2输入输出都定向到文件里

cmd<&fd 把文件描述fd作为标准输入

cmd<&fd 把文件描述符作为标准输出

cmd<&- 关闭标准输入

8. 函数

Shell有函数定义和函数调用之分,但是函数没有参数列表,也没有函数返回值

#! /bin/sh

foo(){

  for TEST in $@;do

     ls –ld $TEST

   done

}

foo $@ 

(1)函数不需要参数。但是调用时可以传参数进去的例如:函数名 参数1、参数2、…… 、参数N        

(2)函数外部的$0和函数内部的$0是一样的

(3)函数外部的$1是命令行的参数和函数内部的$1是函数调用时携带的参数

语法上不支持函数重写、继承、多态等面向对象的方式

9. shell调试

-n 读一遍脚本命令但不执行,检查语法错误./test.sh -n

-v一边执行脚本,一边吧执行脚本的命令打印到标准错误输出 ./test.sh -v

-x 跟踪程序执行的信息,把每一条命令的结果打印出来(+代表程序的每一步,不加+代表) 例如./test.sh –x ,如果只需要一小段那么可以set –x 开始 set +x结束

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值