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 |