- 查看当前可使用shell: cat /etc/shells
- 查看当前系统使用的shell : echo $SHELL
- 环境变量:1 对所有用户生效 /etc/profile 2:对当前用户生效 $HOME/.bash_profile
- 变量用"="连接值,等号两侧不可有空格
- 将一个命令的结果赋给一个变量两种方式 1: A=`ls -al` 2: A=$(ls -al)
- 单引号会对所有特殊字符脱意,双引号才解析特殊字符的意思
- "$*"被当成一个参数 ; "$@"被当做多个参数; 不加""时他们一样
- read: read -sp "input you age:" age ;echo $age
- shell数学运算2中方式:
[root@localhost shell]# sum=`expr \`expr 3 + 2 \` \* 5`;echo $sum
[root@localhost shell]# sum=$(((3 + 2) * 5));echo $sum - $():用途和``相同,表示内部是命令; $(()):表示内部是运算; ${}:表示取变量的值
- 数值的比较: -gt> -lt< -eq= -le<= -ge>= -ne !=
- 文件的判断: [ -d file ] 是否目录 [ -e file ]是否存在 [ -r file ]是否可读
- 多重条件判断: [ 条件1 -a|-o 条件2 ] -a=and -o=or [ ! 条件3 ]
- 自定义的函数的返回值只能是数字
- shift 参数左移一位
- vi :set nu :行号回车可进入某行
- $?:上一个命令的返回值 0 表示上个命令成功执行; $$:表示当前进程的进程号PID; $! : 后台运行的最后一个进程的PID
- pstree
- set :查看系统所有变量
定时:crontab -e 编辑定时任务 crontab -l 列出当前存在的定时任务 分 时 日 月 周(0周日)
egg: */3 8-23 * * * /bin/bash /shell/myjob.sh
注意:1.每个时间段都可以指定多个,连续的使用"-"分割,不连续的使用","分割
2.命令应给给出绝对路径
which 命令: 用于查找并显示给定命令的绝对路径
强大的awk
egg: 获取ip : ifconfig eth0|grep "inet addr"|awk -F: '{print $2}'|awk '{print $1}'
说明:-F选项指定分隔符(上面例子中第一个分隔符为":") 默认分割符为空格(上面例子中第二个分隔符为默认的空格)
# history
显示输入过得命令
# !num
执行history中num对应的那个命令
ctrl+r:搜索输入过的命令,然后回车执行这个命令
-
/dev/null 表示空设备文件 0 表示stdin标准输入 1 表示stdout标准输出 2 表示stderr标准错误 - command 1>a 2>&1与command 1>a 2>a还是有区别的,区别就在于前者只打开一次文件a,后者会打开文件两次,并导致stdout被stderr覆盖。&1的含义就可以理解为用标准输出的引用,引用的就是重定向标准输出产生打开的a。从IO效率上来讲,command 1>a 2>&1比command 1>a 2>a的效率更高
- $? 如果结束状态是0,说明前一个命令执行成功
- debug shell : sh -x myscript.sh(选项 -n 不知行脚本,检查语法是否错误 ;-x 执行脚本并显示变量的值; 在脚本中set -x可以调试脚本的一部分)
- 生成秘钥对: ssh-keygen -t rsa 然后一路回车
- 配置免密登录:ssh-copy-id user@host
- 使用yum安装lrzsz:yum -y install lrzsz (安装后可以使用rz接收,sz发送文件)
- yum模糊查找需要安装的包:yum list|grep java
- 配置环境变量:JAVA_HOME=xxx; PATH=.:$PATH:$JAVA_HOME/bin; export PATH JAVA_HOME source /ect/profile
- 心跳
HTTP_CODE=`curl http://127.0.0.1:8080 -o /dev/null -s -w %{http_code} -m 2`