shell
系统中每个用户都有一个默认shell(/etc/passwd指定)
shell命令分为外部命令,内部命令(用help查看)
echo
echo string
-n#禁止换行(不输出换行)
-e#解释反斜杠(\)引导的转义字符(如\n回车换行 \r回车不换行)
#引用字符集
\#后面的元字符按字符字面解释
“”#双引号中处$,',"外的字符按字面解释
‘’#单引号中处‘外的字符按字面解释
shell变量
set #查看当前使用的shell变量
unset var_name#删除不需要的变量
var_name=var#给变量赋值
echo $var_name#$var_name变量值,可用来做选项,参数等
环境变量
管理员定义,拥有系统所知的名字
局部变量
用户自己定义
shell变量
HOME#保存用户主目录
PATH#设置shell定位命令时所要查找的目录名
#修改PATH PATH=$PATH:dir(直接修改错误)
#标准变量
PS1#提示符字符串
PS2#多行输入一条命令时,设置第二行及以后行的提示符(默认一般>)
SHELL#设置登录shell的完整路径(如/bin/bash)
TERM#设置终端类型
其他元字符
`
`command` #先执行command,再将结果替换
echo `date`#显示 “2021年 06月 26日 星期六 20:29:42 CST"
;
command1;command2;command3#依次执行3个command
()
(command1;command2;command3)#执行一组命令,结果可以重定向(不加括号指定重定向前一个)
&
command &#后台运行
| 将一个命令标准输出作为另一个命令输入
ls -c |wc -w
其他工具命令
sleep n#延时n秒
ps #查看进程详细信息
ps#不带选项,显示当前终端用户进程状态
-e#显示所有进程
-f#显示信息完整列表
kill #发信号给进程
kill -SIGKILL pid
kill -9 pid#强制终止进程
tee#分离输出
#tee命令和|一起实现多重输出
command|tee fiename#既输出到终端,也输出到filename
-a#追加
-i#忽略中断信号
grep#在一个或多个文件中查找满足特定格式的行
grep string filename
#输出:找满足条件的行在终端显示
#输入:无文件则标准输入
-c#只显示每个文件匹配的行数
-i#搜索时忽略大小写
-l#显示符合条件的文件名
-n#显示行号
-v#显示不匹配行
sort#对文件内容排序
sort filename
-b忽视千岛空格
-d按字典序排序,忽视符号
-f忽视大小写
-n数字以数值排序
-o将输出存储在指定文件中
-r倒序排序
shell编程
执行脚本
使用sh命令
启动一个新shell运行脚本程序
子shell
sh filename
ksh filename
bash filename
使脚本变成可执行文件
需要执行权限
子shell
chmod string filename#更改文件权限string=c/g/o/a + +/-/= + r/w/x/-
#u 用户/所有者 g组用户 o其他用户 a所有用户
./filename#执行脚本
.
当前shell
.filename
编写脚本
退出shell
exit
ctrl+d
`command`#将command命令输出作为另一个分命令参数
read A B C#从标准输入设备读入字符串存入变量,字符串树多于变量数,贼剩余字符存入最后一个变量
变量
变量全为字符,字符串中包含空格,必须用”“;
unset#清除变量(控制变量生存周期)
命令行参数
命令行参数多余9个,第9个之后被忽略,但可通过$*获得
myshell abc 123 b2b#按顺序分别被命名为$0,$1,$2....$9
$0#脚本文件名
$1-$9#命令行参数
$# 命令行参数个数
$@,$*#所有的命令行参数
$$#正在执行进程的ID
set#为命令行参数赋值,从$1开始
终止程序运行
exit n
条件
if [ condition ]#或者 if test condiion
then
command
...
else
command
elif
command
fi
test#test condition 与 [ condition ] 一样
test condition1 逻辑运算符 condition2
#逻辑运算符
-a#and
-o#or
!#非
数字
-eq#equal#左右加空格,下同
-ne#un equal
-gt# greater than
-ge# greater equal
-lt#less than
-le#less equal
字符串
=#判断是否相等#左右加空格,下同
!=#判断是否不等
-n#判断是否有字符,-n "string"必须加引号
-z#判断是否无字符,-z "string"同上
文件检测
-r#是否存在且刻可读
-w#是都存在且可写
-s#是否存在且长度非零
-f#是否存在且为普通文件
-d#是否存在且为目录
运算
不能直接运算,否则显示字符串
-
- * / %
expr
expr 1 + 2#符号两旁空格
x=`expr $x + 1`#使用
#关系运算符
= != < <= > >=
let
let x=x+1#计算符号左右无空格
循环
#for-in-done
for variable
in list-of -value
do
command
done
#while-do-done
while [ condition ]
do
command
done
#until-do-done
until [ condition ]
do
command
done