最近在学习linux shell,写写笔记。
alias对命令起别名,如果直接打上去可以查看起名情况
alias
名字="命令"
unalias
名字取消别名
命令历史
保存用户曾经执行过的命令操作
存放位置:~/.bash_history 文件
history或上下键
-c清除历史记录
history的size限制再/etc/profile文件中。
交互式硬件设备
标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告执行出错信息
类型
设备文件
文件描述编号
默认设备
标准输入
/dev/stdin 0
键盘
标准输出
/dev/stdout 1 显示器
标准错误输出
/dev/stderr
2
显示器
改变标准输入、标准输出、标准错误的方向
类型 操作符 用途
重定向标准输入 < 将命令中接收输入的途径由默认的键盘更改为指定的文件
重定向标准输出 > 将命令的执行结果输出到指定文件中而非直接到屏幕
>> 将命令执行的结果追加到指定文件中
重定向标准错误
2> 清空指定文件的内容,并将标准错误信息保存到该文件
2>> 将标准错误信息追加到指定文件
重定向标准输出和错误 &> 将标准输出和错误内容全部保存在只到指定文件中
-----------shell-------------------------------------------------------
为了方便管理linux系统提供特定参数。
1.变量名:使用固定的名称,有系统预设或者用户定义
2.变量值:能够根据用户设置,系统环境变化而变化
变量种类
用户自定义变量:由用户自己定义,修改和使用
环境变量:由系统维护,用于设置用户的shell工作环境,只有极少数的用户可以修改
预定义变量:bash预定义的特殊变量,不能直接修改
位置变量:通过命令行给程序传递执行参数
定义新的变量
格式:变量名=变量值
键值对
查看变量的值
echo $变量名
set查看所有的变量的
env专门查看全局变量的
从键盘输入内容为变量赋值
格式:read [-p "信息"] 变量名
例如:
read -p 请输入内容 vvv
引号:
双引号和单引号像php的规则一样
``这个反撇号:将命令执行的结果输出给变量
设置变量的作用范围
格式:export 变量名
export 变量名=值
清除用户定义的变量
格式:unset 变量名
计算整数表达式的运算结果
格式:expr 变量1 运算符 变量2
+
-
\*
/
%
环境变量配置文件
全局配置文件:/etc/profile
系统起的时候就去读这个文件
用户配置文件:~/.bash_profile
在环境变量中添加在PATH中添加
[root@localhost ~]#PATH=$PAHT:/root
':'这个符号是分隔符号
常见的环境变量
$USER $LOGNAME $UID $SHELL $HOME $PWD $PATH $PS1 $PS2
for 变量名 in 集合
do
done
sleep 1睡一秒
预定义变量
如下:
$#:命令行中位置参数的个数
$*:所有位置参数的内容
$?:上一条命令执行后返回的状态,当返回状态值为0正常,非0则异常或错误
$$:当前所在进程的进程号
$!:后台运行的最后一个进程号
$0:当前执行的进程或脚本名字
#!这两个表示要用什么解析器接收,shell
du -sh 查看文件大小
ll -R /root/ -R是递归的
test命令
用途:测试特定的表达式是否成立,当成立的时候命令执行后返回0,否则返回其他数
格式:test 条件表达式
[ 这里面的条件每个单位都要用空格隔开 ]
测试文件状态
格式:[ 操作符 文件或目录 ]
常用的测试操作符
-d:测试是否为目录
-e:测试是否存在
-f:测试是否为文件
-r:测试当前用户是否有权读取
-w:测试当前用户是否有权限写入
-x:测试当前用户是否可执行
-L:测试是否为连接文件
例如
[root@localhost ~]# [ -d /etc/passwd ]
echo $?
为1则不是目录
当然也可以这样写
#[ -e /usr/local ] && echo "yes"
如果前面执行成功后面就执行,否则不输出
整数值比较
格式:[ 整数1 操作符 整数2 ]
常用的测试操作符
-eq:等于
-ne:不等于
-gt:大于
-lt:小于
-le:小于或等于
-ge:大于或等于
[root@localhost ~]# [ `who |wc -l` -le 10 ] && echo "yes"
wc -l查看数量
字符串比较
格式:
[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
[ -z 字符串 ]
=相等
!=不相等
-z字符串为空
例:
#[ $LANG!="en.US" ] && echo $LANG
逻辑测试
格式:[ 表达式1 ] 操作符 [ 表达式2 ]
常用的测试操作符
-a或&&:逻辑与
-o或者||逻辑或
!:逻辑否
例:
[root@localhost ~]# [ $USER != "teacher" ] || echo "not teacher"
[root@localhost ~]# [ $USER = "teacher" ] || echo "teacher"
#!/bin/bash
RATE=`df -hT |grep "/boot" | awk '{print $6}' | cut -d "%" -f1`
if [ $RATE -gt 80 ]
then
echo "Warning,DISK IS FULL"
fi
#!/bin/bash
service mysqld status &>/dev/null
if [ $? -eq 0 ]
then
echo "mysqld service is running.."
else
/etc/init.d/mysqld restart
fi
--------------------------------------------------------
#!/bin/bash
for v in $*
do
echo $v
sleep 1
done
for time in "today" "yesterday" "tomorrow"
do
echo "$time changed"
done
echo "--------end----"
------------------------------------------------------------------------
#!/bin/bash
for((i=0;i<10;i++))
do
echo $i
sleep 1
done
echo "end------"
#双括号里面只能有与数字相关的才行的
如echo $(($i+1))
递增
let i++
[root@localhost ~]# cat /etc/passwd |grep bash |awk -F: '{print $1,$2}'
[root@localhost ~]# find ./ -user root
查找关于用户的文件
如果要批量建立用户可以这样建
useradd stu$i
echo "123" | passwd --stdin stu$i &> /dev/null
i=`expr $i+1`
#!/bin/bash
case $1 in
start)
echo "start......."
;;
#;;表示结束
stop)
echo "stop......."
*)
echo "default..start|stop."
;;
esac
#!/bin/bash
read -p "presss key : " key
case "$key" in
[a-z][A-Z])
echo "letter"
;;
[0-9])
echo "digit"
;;
*)
echo "letter or digit allow"
esac
#后面是正则