uname -a 内核版本号
管道:前面的内容做后面的输入
--set 设置权限,并替换
--restore 回复
##shell是壳,命令解释器,“翻译官”。是一个人机接口用于解释用户输入的命令,将命令解释为linux内核可以执行的2进制代码。
cat /etc/shells 察看系统支持的shell
tab键补全
alias 别名=‘原命令’ 不能加空格 unalias xx 取消别名
grep ="grep --color=auto" 查询的带颜色
###如果要永久存在 加入/etc/profile (用 echo "alias xxx ='xx' >> /etc/profile ) 或 ~/.bashrc
然后#source ~/.bashrc
###要用户生效 加入 /etc/bashrc最后
然后source /etc/bashrc
/etc/profile 用户第一次登录时文件被执行
/etc/bashrc bash shell打开时读取
/bash profile 仅执行一次 环境变量 执行.bashrc(交互式 、Login方式进入bash)
/.bashrc 新开shell就执行(交互式 non-login方式进入)
unalias 别名
尽量一行一个 可以用;号分割
&& 与 || 或 (可以看做if else)
echo $? 表示上一个表达式的结果
$? =0 正确 $?不为0是错误
tee 将过程输出到某 file
echo 输出
Shell 基本格式
Shell 脚本基本元素
(1) #!/bin/bash 必须的 /sh
(2) # 注释
(3) 变量
(4)控制
运行时 chmod + x first.sh
if while for 把shell控制台里的内容放入脚本即可
变量名称不能以数字开头
变量默认的是字符串型
$HISTSIZE = 1000
$PWD 当前路径
本地变量
变量名=值 1.等号两边没有空格 2.取值包含空格要用双引号 3.区分大小写
$a 或者 ${abc} 避免拼接的语误
echo -n 不换行
环境变量
PATH=/home:$PATH
export $PATH
env 显示环境变量
内部变量
$# 传送给shell的参数数量
$? 是否成功
$0 程序名称
$* 调用shell程序传输的所有单字符串
$@ 全部参数
$ n 第几个参数
$$ 返回pid
' '里的都是普通字符 原样输出
$ 是变量名
“ ” 除了 $ 转移符\ 倒引号 三个保留 其他的做普通字符
倒引号 · · 内当shell执行
中文字符原样执行了,有bug
提取字符串
string =" "
echo ${string:1:4}
##数值运算
1)dd =$(expr $aa + $bb) + 号两侧有空格
* 作为乘号是 要用通配符 \*
echo `expr 1 + 3`
2) ff=$(($aa+$bb))
3) gg=$[$aa+$bb]
read -p "please imp:" var1 请求用户输入
sh 子程序运行完就完清除内容了,之后运行主程序看不到东西
source 不会开启子进程,会在当前进程跑完。
条件判断
test n1 -参数 n2 真返回0,假返回1
比较整数
test 1 -lt 4 等价于 [ 1 -lt 4 ] (注意空格)
echo $?
lt 小于 le 小于等于 gt大于 ge 大于等于 eq等于 ne不等于
if xxx
then xx
elif xxxx
then
echo xxx
else
echo xxx
fi
-f 存在 且是普通文件
-d ~ 目录
-s ~ 字节>0
test -z s 空串
test s 非空
-a 逻辑与 -o 或 !非
### seq 产生序列
## case xx in
0) xxxx ;;
1) xxxx ;;
2) xxxx ;;
esac
## for i in `seq 1 9`
do
echo xxxxx
done
## read 输入数据时, 以tab或空格分割
输入超了,最后一个变量赋予所以数据
read a b
for i in xxx
do
echo xxx
done
## while 与 break
while true
do
if xxxxx
then
break (break 2 可以跳两层)
done
##
函数
funciton()
{
}
函数在使用前必须定义,必须将函数放在脚本开始部分
可以在函数中引用参数
array_var =(x,x,x,x,x)
array_var[0]=xx
*号是整体性,@强调独立性
echo -e 后加 \n 识别\n 换行
关联数组 declare -A array 显式声明
${# } 取长度
${!} 取所有值
{1...100 生成序列}