linux shell基础
===========================shell编程===================================
1、Bash 的常用功能
Tab 键自动补全
命令历史记录 历史记录里边最多能保存1000条记录
echo $HISTSIZE --->10000
vi /etc/profile......
命令别名: 建立别名:alias mysql="/usr/local/mysql/bin/mysql"
删除别名:unalias mysql
标准的输入出
重定向 导入 ">"---覆盖写入, ">>"---追加写入
1>,1>>正确的输出 默认是该方式
2>,2>>错误输出
&> ,&>>--- &代表正确和错误的输出
(ls;lllllllll)&>file 正确和错误同时输出
(ls;lllllllll) 1>>file 2>&1 正确和错误追加写入
多条指令之间用";"输出
读取键盘输入 存储到变量name 然后输出$name
read -p "please input your username:"name
please input your username:root
echo $name
root
管道操作符 "|"
2、shell变量
1)、变量名:
2)、变量值:
变量的类型:
1)、局部变量
2)、全局变量
3)、预定义变量
4)、位置变量
局部变量:
1、新建
str="hello world\!";
str='hello world!';
echo $str;
2、删除一个变量
unset str
3、set查看一个变量
全局变量:
vi test.sh
#!/bin/bash --->找解析器
1、局部变量输出为全局变量
export str
2、查看全局变量
env---只能查看全局变量 or set--查看所有变量
位置变量:
$1、$2、....$9 用来应用1~9的位置
常见的预定义变量 共六个
$0 、用于存储脚本的名字
$* 、用户记录脚本的所有参数
$$ 、用于记录脚本的PID值
$# 、输入了多少个参数
$? 、用户记录脚本的运行状态 是否执行成功 0表示执行成功 非0代表错误
$!
#for循环输出传入参数
#!/bin/bash
for loop in $*
do
echo $loop;
done
变量赋值与引用
""可以解析里边的变量
str="aaaaaaaaaaaaaaaaaaa"
echo "bbbbbb${str}cccccc"
''不解析里边的变量
echo 'bbbbbbbb$str'
``可以执行其中的shell指令
srt=`ls -l` //把其中的shell指令的执行结果赋给str
********awk 取坐标
========================================================
26、set #查看环境变量
27、echo $HOME #输出当前登录用户的家目录信息
28、echo $LANG #输出服务器的语言环境信息
29、echo $PATH #输出path环境变量 table补全要去这地方查找能适配的补全命令
30、echo $PS1 #用户身份提示符 默认root为#号 普通用户为 $ --可以修改
PS1='[\w]\$' or PS1='[\u@\h \W]\$'
31、echo $PS2 #辅助提示符">" 修改PS2=":"
32、readonly
33、/etc/profile 全局环境变量配置文件
34、.basn_profile
35、#!bin/bash shell脚本开始出必须写的一个语句
36、自定义变量有数字、字母、下划线组成
无需指明变量类型 默认是字符型 需要其他类型 可以做类型转换
NAME=huangjialin
echo $NAME--->huangjialin
转换实列:
A=12
B=24
expr $A + $B--->36 "+"号前后空格必须有
*(乘号)必须转义 \*
let num-- ($num ++)
加 减 乘 除 取余
37、自定义变量的话有自己的作用域
38、shell中的数组
通俗讲就是一些变量的集合
数组的定义:ARRAY=(1 2 3 4 5 6)
数组的使用:${ARRAY[0]} ${ARRAY[1]} ${ARRAY[2]} ${ARRAY[3]} ......
获取数组元素的个数:LENGTH=${#ARRAY[@]}
输出数组中所有元素:LENGTH=${ARRAY[@]}
数组排序实列:
ARRAY=(1 2 30 4000 500 60 70 3773)
LENGTH=${#ARRAY[@]}
I=0
while["$I" -lt "$LENGTH"]
do
J=`expr $I + 1`
while["$J" -lt "$LENGTH"]
do
if["${ARRAY[J]}" -lt "${ARRAY[I]}"]
then
TEMP=${ARRAY[J]}
ARRAY[J]=${ARRAY[I]}
ARRAY[I]=$TEMP
fi
J=`expr $J + 1`
done
I=`expr $I + 1`
done
echo ${ARRAY[@]}
unset ARRAY I J TEMP LENGTH
****./ 表示当前路径
也可以用全路径的方式来执行
1、shell条件测试
test 测试表达式是否成立
测试文件状态
格式:[ 操作符 文件或目录 ]
常用测试操作符:
-d 测试是否为目录
-e 测试文件是否存在
-f 测试是否为文件
-r 测试当前用户是否有权限度文件
-l
-L测试是否为链接文件
整数值比较
格式:[ 整数1 操作符 整数2 ]
[常用的测试操作符]
-eq等于
-ne不等于
-gt大于
-lt小于
-le 小于等于
-ge 大于等于
[ `who|wc-l` -le 10 ] && echo "yes"
df | awk 'NR==3{print int($4),$1,$3}' 输出df结果的第三行 disi列的数值 大括号前面为条件 大括号里边为执行区间
cat /etc/passwd |awk -F:'{print $1"===>"$7}'
字符串比较:
格式:
****mail n--数字查看邮件 d--删除邮件 q---退出邮件查看
mail root@localhost
探测某个应用程序 是否启动 -w2为探测时间2秒
nc -w2 localhost 80
nc -w2 localhost 3306
service httpd restart &>/dev/null 黑洞程序
echo 123456 |passwd --stdin username&>/dev/null