Linux Shell脚本相关学习。

Shell:操作系统与用户进行交互操作的界面,提供脚本语言编程环境,方便用户自动批量处理大量的工作任务。

红帽企业版linux一般默认的Shell是bash shell。

shell脚本

Shell:操作系统与用户进行交互操作的界面,提供脚本语言编程环境,方便用户自动批量处理大量的工作任务。

红帽企业版linux一般默认的Shell是bash shell。

vim aa.sh           #编辑aa脚本

cd /root/Desktop   #切换到root下的桌面

mkdir aa            #创建aa目录

touch aa/aa.txt    #在aa目录下创建aa.txt

sh aa.sh            #运行aa.sh脚本

echo $$   查看当前进程号 

bash      进入另一个shell

exit      退出

history 历史

语法 替换
!! 前一个命令
!n 命令号n
!-n 倒数第n个命令
!cmd 最后用来启动cmd的命令

多命令运行

#!/bin/sh  注释信息,可写可不写

echo $?  返回值:通过$?变量进行查看,返回0成功,不成功则返回非0值!

有条件的链接命令

&&  把两个命令链接在一起,只有第一个命令成功执行时,才会执行第二个命令。

||  把两个命令链接在一起,只有第一个命令失败时,才会执行第二个命令。

Bash变量

例如:aa=DataScience

echo $aa 则会显示DataScience

Shell变量

A和B  A=123 B=234

echo a:$A b:$B  显示AB变量内容

a:123 b:234

export A 将A变量提升为环境变量

bash

ps

echo a:$A b:$B---- 启动一个bash ,通过ps运行,确定有俩个shell在运行;父shell(B),子shell(A)由于被提升为一个环境变量,A shell从B shell中继承了它,相反,A shell对B shell的变量B一无所知。Bshell 属于sleep状态。结果如下

a:123 :b:

exit  

echo a:$A b:$B 退出再次查看

 a:123 b:234

unset A B----- 取消环境变量A和shell变量 B 

命令替换

替换 语法 含义
历史(history) 前一个命令行
大括号(Brace) {} 指定的文本
代字号(Tilde) ~username 用户的主目录
变量 $,${…} Shell和环境变量
算数(Arithmetic) $((…)) 算数运算
命令替换 ‘…’,$(…) 运行在字shell中的命令的输出
路径名(Pathname) [^…*]?,[…] 文件系统中匹配的文件名
mkdir chap{a1,a2,a3,a4,}/{bb,cc} 需要先创建{a1,a2,a3,a4}

mkdir -p {a1,a2,a3,a4,}/{bb,cc}

算法

a=123 b=234

echo $(($a+$b))  ----- a+b

357         ---------- 结果


2、计算器

Scale=2  保留几位小数, %取余。
Quit     退出计算器
 \;反斜杠 转义字符

创建时间文档


 date +%Y%m%d  
语法 作用
\ 避免下一个字符被shell解释
“” 避免双引号内除了S、!和(反引号)字符以外的其它字符被shell解释
‘’ 避免单引号内的字符被shell解释
alias 命令  Shell别名可创建扩展(替换)为任意文本的命令

alias NAME=a

unalias 取消 

unalias a 取消a替换NAME的命令

标准输入 标准输出

echo “aaa”> aa.txt   创建aa.txt文档

cat aa.txt       查看aa.txt文档

设置密码(可批量设置用户密码)

useradd u1   创建u1用户

passwd u1    设置u1 密码

useradd u2   创建u2用户

vim bb.txt   新建立一个bb.txt文档

123456      将密码输入 bb.txt文档中

passwd u2  --stdin < bb.txt    将输入定向到文档中

su - u1  切换到u1

su - u2   切换到u2

输入密码  123456

标准输出和错误输出

echo “aaabbccc”>aa.txt

>>文件续写

echo “aaabbbcc”>>aa.txt

意思是用>把内容输入到文档中。

head -1 /etc/rc.d/\* > aa.txt 2>bb.txt 

将标准输出和错误输出分别传到aa.txt和bb.txt

head -1 /etc/re.d/\* >aa.txt 2>&1 

head -1 /etc/rc.d/\* >& aa.txt

将标准输出和错误输出合并到aa.txt

Shell scripts

scripts脚本返回值 echo $?

返回值 退出状态
0(Zero) Success
Non-zero Failure
2 Incorrect usage
126 Not an executable
127 Command not found
vim aa.sh 编辑aa.sh脚本

read -p "qing shu ru yong hu ming cheng " name

echo $name

sh aa.sh  运行aa,name脚本

只读变量

变量 含义
最新执行的命令的退出状态
- 当前启用中的shell选项标记
$ 当前shell的进程id(PID)
最新后台命令的进程ID(pid)
_ 前一个命令的最后标记
PPID shell父进程的ID(PID)
SHELLOPTS 被冒号隔开的当前启用中的shell选项列表,和set -o命令结果一样
UID 当前用户的用户id

路径替换

~ */? []/[^] &

比较–针对文件

关于文件类型的判断,如:test -e filename

-e 是否存在
-f 是否为文件
-d 是否为目录
-b 是否为block device
-c 是否为character device
-S 是否为socket
-p 是否为pipe文件
-L 是否为链接

比较–权限

关于文件权限的判断,如:test -r filename

-r 文件是否可读
-w 文件是否可写
-x 文件是否可执行
-u 文件是否有SUID
-g 文件是否有SGID
-k 文件是否有Sticky bit
-s 文件是否非空

比较–新旧与大小

比较两个文件大小,命令 例如: test A -nt B

-nt A是否比B新
-ot A是否比B旧
-ef A是否和B是用一个文件,两个整数之间的判断。
-eq 两个数相等
-ne 两个数不等
-gt A大于B
-lt A小于B
-ge A大于等于B
-le A小于等于B

评论