Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31327
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 117
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-15 11:41
个人简介

逗逼说二货人生精彩,二货说逗逼人生有趣

文章分类

全部博文(9)

文章存档

2014年(9)

我的朋友

分类: 系统运维

2014-05-14 21:37:51

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) |
0

上一篇:参考模型

下一篇:vi按键

给主人留下些什么吧!~~