cat /etc/shells
tail -5 /etc/passwd
切换shell环境,csh、ksh、tsh等,直接敲
chsh zhangsan (zhangsan为用户) 则张三永久切换到chsh模式。如不加用户名则是当前用户
usermod -s (shell程序路径) 用户名
cat .bash_history
history -c 清空历史
!n:执行第n条命令
!str:执行以str开头的命令
cat .bashrc | more
unalisa 别名 取消 unalias -a 查看别名
alias 别名:“实际执行命令”
cat /etc/passwd | more
free -m cpu内存空闲
free -m | head -2 显示前两行
free -m | grep “mem” | awk '{print $2,$4}'
定义变量:
变量名=变量值
echo $变量名
赋值操作方法 (双引号、单引号、反撇号)(英文状态)
双引号“” :允许通过$符引用其他变量值
单引号‘’ :禁止引用其他变量值,$视为普通字符
反撇号`` :将命令的执行结果输出给变量
双引号: Day=sunday
echo $Day
toDay="Today is $Day"
echo $Today
会显示 Today is sunday
单引号: Today='Today is $DAY'
echo $Today
会显示 Today is $DAY
反撇号: username=`free -m | wc -l`
echo $username
会显示 4 (一定是可以执行的命令,或命令的组合)
read G1 G2
one two
echo $G1 会显示one
echo $G2 会显示two
read G1 G2
one,tow three
echo $G1 会显示one,two
echo $G2 会显示three
(read是用空格区分的)
read -p "please input your name:" Name
echo $Name 会输出你之前敲的命令
局部变量与全局变量
echo $Day 会显示sunday,因为我们前面定义过Day这个变量
cat /etc/shells 切换到ksh
输出 echo $Day 没有输出,说明有局限性
export Day 切换ksh echo $Day 显示sunday (export 变量名 ,将局部变量转换为全局变量) 或
export Day=Fir ksh echo $Day 显示Fir
unset Day echo $Day 清除变量
数值变量
X=3 Y=4 expr $X +$Y expr $X - $Y expr $X \* $Y expr $X / $Y expr $X % $Y (求余)
环境变量
全局配置文件 /etc/profile
用户配置文件 ~/.bash_profile
cat /etc/profile | more
echo $USER echo $USER:$HOME
set | more
echo $PATH 查看所以环境变量
which help (which查找的范围是环境变量之内)
set 命令可以查看所有的shell变量,其中包括环境变量
常见的环境变量
$USER $LOGNAME $UID $SHELL $HOME $PWD $PATH $PS1 $PS2
bash
echo $0 $$ (查看当前执行的进程的名称,PID号)
exit 执行一条错误命令
bash:exit:command not found
echo $? 输出127
返回值非0值,表示上一条命令异常
exit echo $? 输出0 表示上一条命令正常
shell脚本
用途:完成特定的,较复杂的系统管理任务
格式:集中保存多余linux命令,普通文本文件
执行方式:按照预设的顺序依次解释执行
标准输出重定向
> 写入(覆盖)
>> 追加
标准输入重定向
--stdin 与 < 作用:可以从文件中读取内容
作用:能够从指定文件中介绍命令
example:passwd --stdin zhangsan < /home/pwd.txt
给张三设置密码,密码文件在/home/pwd.txt文件里
标准输出错误重定向
将错误信息重定向到指定文件中
ls -l /etc/passwd /etc/passwd > std.txt 2> err.log
将两种输出重定向到同一个文件中
ls -l /etc/passwd /etc/passwd &> err.log
编写可执行shell脚本
运行脚本环境设置:#!/bin/bash
注释信息:以#开始的说明脚本文件
可执行的linux命令行
示例:
每周17:30清理FTP服务器的公共共享目录
检查/var/ftp/pub/ 目录,讲其中的所有子目录及文件的详细列表,当事的时间信息追加保存到/var/log/pubdir.log 日志文件中,然后清空该目录
建立 bak.sh
#!/bin/bash
date >> /var/log/pubdir.log
ls -lhR /var/ftp/pub >> /var/log/pubdir.log
rm -rf /var/tmp/*
保存退出 wq
crontab -e
30 17 * * 5 /home/bak.sh
分钟 小时 日期 月 星期
chmod a+x bak.sh
条件测试操作
格式:[ 操作符 文件或目录]
-d :是非为目录 Directory
-e :目录或文件是否存在 write
-f :测试是否为文件 file
-w :当前用户是否有权写入 wirte
-r : 当前用户是否有权读取 Read
-x :当前用户是否可以执行 Excute
-L :是否为符号连接 Link
整数值比较
格式:[ 整数1 操作符 整数2 ]
-eq:等于 -ne:不等于 -gt:大于 -lt:小于 -le:小于或等于 -ge:大于或等于
字符串比较
格式:[ 字符串$1 = 字符串$2 ]
[ 字符串1 != 字符串$2 ]
[ -z 字符串 ]
逻辑测试
格式:[ 表达式1 ] 操作符 [ 表达式2 ]
常用的测试操作符
-a或&&:逻辑与,“而且”的意思
前后两个表达式都成立时整个测试结果为真,否则为假
-o或||:逻辑或,“或者”的意思
操作符两边至少一个为真,结果为真,否则为假
-i 逻辑否
当指定的条件不成立时,返回结果为真
if条件语句——单分之
/boot 分区使用超过80%,输出报警
#!/bin/bash
RATE='df -hT | grep "/boot" | awk '{print $6}' | cut -d "%" -f1
if [ $RATE -gt 80 ]
then
etho "warning,Disk is full"
fi
双分支
1检查/var/log/messages文件是否存在,如存在则统计文件内容并输出,否则不做任何操作
#!/bin/bash
Logpile="/var/log/messages"
if [ -f $Logpile ]
then
wc -l $Logpile
fi
2提示用户指定备份目录的路径,若路径存在则系那是提示信息后跳过,或显示响应信息后创建目录
#!/bin/bash
read -p "what is your hakup dir:" BakDir
if [ -d BakDir ]
then
echo "$BakDir already exit!"
else
echo "$BakDir is not exist,please make it."
mkdir $BakDir
for循环语句
1一次输出三条文字信息,包括一天中"Morning","Noon","Evening"
#!/bin/bash
for TM in "Morning" "Noon" "Evening"
do
echo "The $TM of the day"
done
2字符串赋值
for i in a b c
do
echo "i is $i"
done
2批量添加用户
#!/bin/bash
ULIST=$(cat /root/users.txt)
fot UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME
done
3删除uaddfor.sh脚本所添加的用户
#!/bin/bash
ULIST=$(cat /root/users.txt)
for UNAME in $ULIST
do
userdel -r $UNAME
done
4根据IP地址检查主机状态
#!/bin/bash
HLIST=$(cat /root/ipadds.txt)
for IP in $HLIST
do
ping -c 3 -i 0.2 -w 3 $1 &> /dev/null
if [ $? -eq o ]
then echo "Host $ip is up"
else
cho "Host $ip is down."
fi
done
while 循环语句
1批量添加规律编号用户
#!/bin/bash
PREFIX="stu"
i=1
while [ $i -le 20 ]
do
useradd ${PREFIX}$1
猜价格游戏
#!/bin/bash
PRICE=$(expr $PANDOM % 1000)
TIMES=0
echo "商品实际价格0-999之间,猜猜看是多少?"
while true
do
read -p "请输入你猜测的价格数目:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜你答对了,实际价格是 $PRICE"
echo "你总共猜测了 $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done
检查用户输入的字符类型
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z] | [A-Z])
echo "您输入的是字母"
;;
[0-9])
echo "您输入的是 数字"
;;
*)
echo "您输入的是 空格,功能键或其他控制字符"
esac
编写系统服务脚本
#!/bin/bash
case "$!" in
start)
echo -n "正在启动sleep服务..."
if sleep 7200 & ; then
echo "OK"
fi
;;
stop)
echo -n "正在停止sleep服务..."
pkill "sleep" &> /dev/null && echo "OK"
;;
status)
if pgrep "sleep" &>/dev/null ; then
echo "sleep服务已经启动"
else
echo "sleep服务已经停止"
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "用法:$0 {start|stop|status|restart}"
esac
所以的脚本不要忘了给它加上执行权哦
chmod +x (你的脚本名称)
chkconfig --add myprog
chkconfig --list myprog
myprog 是我前面写的服务脚本的文件名称
阅读(949) | 评论(0) | 转发(0) |