Linux_Shell脚本攻略学习笔记(1)1.1-1.5

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25453065/article/details/85041720

1.1
1)shell脚本的两种执行方式:
a.直接输入地址+脚本名,如当前目录的./test.shell或者~/Documets/test.shell
这种方式必须在脚本头指定解释器,即#!/bin/bash
b.不需要指定解释器,使用/bin/bash ~/Documents/test.shell的方式
2)每条命令之间使用换行或者分号进行分隔
3)两个bash相关的特殊文件:~/.bashsrc(打开终端时的各种设置)& ~/.bash_history(用户运行过的命令)

1.2
终端打印的两种方式:
1)echo
a. echo ‘…’ 基本完全按照单引号里的内容进行打印
b. echo “…” 特殊的字符需要使用转义符去转义
c. echo … 功能基本类似于b. 但是例如分号,这种方式不能直接打印
d. 特别的两个参数,-e/-E 控制转义符,-n取消echo的自带换行
2)printf
使用方法基本类似与C语言,格式化字符串的功能

1.3
1)在bash中,所有变量的值都是字符串!!!
2)查看某个进程使用的环境变量:
a. 根据进程名称,查询进程号,以motion这个进程为例,回显是进程ID
pgrep motion
b. 假设上一步查到的进程ID是286, 由于该环境变量在存储时,彼此是通过’\0’分隔的,不直观,使用’\n’替代会更方便来看
cat /proc/286/environ | tr ‘\0’ ‘\n’
3) 注意变量的赋值,如果是一个包含空白字符的字符串,必须要用单引号或者双引号括起来。比如空格即使空白字符,赋值必须用引号,var=‘Hello world!’
4)其他环境变量相关
a. 设置环境变量,举例
VAR=“environment var.”
export VAR
b. shell每次执行时从环境变量PATH指定的地址搜索要执行的文件,也就是说如果把自己常用来存放脚本的路径添加进去,那么以后执行脚本就不用输入完整的路径了,直接输入脚本名称即可。
PATH存放在/etc/profile中,打开该文件,在文件后面添加下面这句。
export PATH="$PATH:~/Documents/script"
修改该文件之后,要立即生效,可执行 source /etc/profile
c. 其他常用的环境变量
HOME/PWD/USER/UID/SHELL
比如可以通过对UID做判断是否等于0,以此断定当前用户是否是超级用户。
5)获取变量长度的方法,以获取PATH的长度为例
length=${#PATH}

1.4
shell数学运算常用的四种方式:let / (( )) / [ ] / expr

  1. let ,变量前$加或者不加都可以,算数表达式有没有空格都没关系
    let no1++
    let result=no1 + no2
    let $no1+=6
  2. (( )) / [ ], 变量前 ( ( ) ) [ ] r e s u l t = 加或不加都可以,但是(( ))和[ ]前必须加。括号内的表达式有没有空格也没关系 result= [no1+no2]
    result= ( ( n o 1 + n o 2 ) ) 3 e x p r ((no1 + no2)) 3)expr两种写法, ` 不是单引号 ‘ 。变量前必须加 , 运算表达式内部必须有空格
    result=`expr 3 + 4`
    result=$(expr $no1 + 5)

1.5
1)文件描述符,系统默认有三个
0-----stdin
1-----stdout
2-----stderr
2) 默认输出是stdout > 等同 1> , >> 等同 1>>
> 输出到文件会覆盖操作, >> 输出到文件是追加操作
stderr 使用 2> , 2>>
3) 所有命令执行结束后,返回值会写在$?中。
0代表成功输出使用的是stdout,非0代表失败即相应使用的是stderr
4) 清除变量a1所有权限
chmod 000 a1
5)使用重定向符后,命令的输出只会记录在相应的输出文件中,不会在终端打印。
如果要实现既在终端打印,又输出到文件,需要用到 tee,但是tee只能用于stdout,stderr不可以。
使用方法:cat log.log | tee out.log
6)如果只是想要忽略某种输出,不想让其在终端打印,或者输出到其他文件,可以将输出重定向到 /dev/null(被称为位桶或者黑洞)
例如:cat log.log 2> /dev/null

猜你喜欢

转载自blog.csdn.net/qq_25453065/article/details/85041720
今日推荐