文档库 最新最全的文档下载
当前位置:文档库 › LINUX SHELL常用语句用法

LINUX SHELL常用语句用法

##if
-d :判断制定的是否为目录
-z:判断制定的变量是否存在值
-f:判断制定的是否为文件
-L:判断制定的是否为符号链接
-r:判断制定的是否可读
-s:判断存在的对象长度是否为0
-w:判断制定的是否可写
-x:判断存在的对象是否可以执行
!:测试条件的否定符号
if [ -n "$1" ] ;then .... 判断$1 是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
if ....; then
....
elif ....; then
....
else
....
fi
if [ "$SHELL" = "/bin/bash" ]; then
 echo "your login shell is the bash (bourne again shell)"
else
 echo "your login shell is not bash but $SHELL"
fi
##case
ftype=`file "$1"`
case "$ftype" in
"$1: Zip archive"*)
unzip "$1" ;;
"$1: gzip compressed"*)
gunzip "$1" ;;
"$1: bzip2 compressed"*)
bunzip2 "$1" ;;
*) echo "File $1 can not be uncompressed with smartzip";;
esac
##select
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
break
done
echo "You have selected $var"
##while
while ...; do
....
done
i = 1
sum = 0
while [$i -le 20]
do
sum = `expr $i + $sum`
let i++
done
echo $sum

while :
do
cat /var/log/messages|grep NFSD
var=$?
if [ $var = 0 ] ;then echo "NFS is exist!"
else echo "NFS is not exist"
fi
sleep 3
done


##for
for i in `ls`;do (if test -c $i;then echo $i;fi);done ##test -c -b -d -f -G -eq -ge -gt -le -lt -ne
for n in {100..105}; do
host=192.168.1.$n
ping -c2 $host &>/dev/null
if [ $? = 0 ]; then
echo "$host is UP"
else
echo "$host is DOWN"
fi
done
arr=("a" "b" "c")
for i in ${arr[@]};do echo $i ;done
for i in $*;do echo $i;done $*代表输入的所有参数
for i in a b c ;do echo $i;done
for ((i=0;i<=10;i++));do echo $i;done
##select 用法
select var in "NO1" "NO2" "NO3";do
break
done
echo "you select is $var"
##Crontab 用法
##晚上11点到早上8点之间每两个小时,早上八点 分钟 小时 日期 月份 周几 -u -r -e -l
0 23-8/2,8 * * * echo "Have a good dream:)" >> /tmp/test.txt
##seq 用法
sed -n '2'p filename , 打印文件的第二行。
sed -n '1,3'p filename 打印文件的1到3行
sed -n '/Neave/'p filename 打印匹配Neave的行(模糊匹配)
sed -n '4,/The/'p filename 在第4行查询模式The
sed -n '1,$'p filename 打印整个文件
sed -n '/music/=' quote.txt 打印行号
sed '1d' filename 删除第一行
sed 's/night/NIGHT/' quote.txt s替换/night/NIGHT/
sed 's/\$//' quote.txt $换成空格
sed 's/The/Wow!/g' quote.txt g替换所有
sed 's/splendid/SPLENDID/w sed.out' quote.txt w sed.out此行写入文件
sed '1,2 w filedt' quote.txt 第一二行写入文件
sed '/Neave/ w dht' quote.txt 匹配//的写入文件
sed '/company./r sedex.txt' quote.txt
,$表示最后一行。
##awk用法
awk ‘{print $1}’filename;
awk –F :‘{print

$1,$3}’filename
awk '{print $0}' grade.txt 打印所有记录
awk 'BEGIN {print "Name Belt\n----"} {print $1"\t"$4}' grade.txt
awk 'BEGIN {print "Name\n-----"} {print $1} END {"end-of-report"}' grade.txt
awk '{if ($4~/Brown/) print $0}' grade.txt 匹配
awk '$3 == "48" {print $0}' grade.txt 精确匹配
awk '{if ($3=="48") print $0}' grade.txt 精确匹配
awk '$0 !~ /Brown/' grade.txt 不匹配
awk '{if($4 !~ /Brown/) print $0' grade.txt 不匹配
awk '$4 != "Brwon-2" {print $0}' grade.txt 精确不匹配
awk '{if ($6 < $7) print $0 "$1 Try better at the next comp"}' grade.txt 小于
awk '/[Gg]reen/' grade.txt 设置大小写
awk '$1 ~/^...a/' grade.txt 抽取名字,其记录第一域的第四个字符是a,使用句点.。表达式/^...a/意为行首前三个字符任意,第四个是a,尖角符号代表行首。
awk '$0~/(Yellow|Brown)/' grade.txt 或关系匹配
awk '{if ($1 == "P.Bunny" && $4 == "Yellow") print $0}' grade.txt 意味着两边匹配均为真
awk '{if ($4 == "Yellow" || $4 ~ /Brown/) print $0}' grade.txt OR
cat install.log|awk -F " " '{print $1}' " "表示以空格为分隔线

##key用法
ssh key
ssh-keygen -d ##(-t rsa /dsa)
ssh-copy-id -i /home/51cto/.ssh/id_dsa.pub 192.168.8.188
expect 用法
#!/usr/bin/expect
set aa [lindex $argv 0] ##$argv 0 表示参数
spawn ssh $aa
expect "password:"
send "linjiang2718\r"
spawn echo "test is ok!"
interact
决定如何响应
expect -re "\[(.*)]:" ##满足有[]的所有数据,放入()表示引入变量
if {$expect_out(1,string)!="/bin/tcsh"} {
send "/bin/tcsh" }
send " "
expect eof
##find
find . -mtime -1 -type f -print
-name
-perm
-user
-group
-mtime -n +n (atime,-ctime) 修改时间(访问时间,创建时间)
##cut
cut -b 3 #提取每一行的第3个字节
cut -b 3-5,8 提取每一行第3到第5 和第8个字节
cut -b -3,3- -3表示从第一个字节到第三个字节,而3-表示从第三个字节到行尾
cut -c 3 cut_ch.txt 中文
-n用于告诉cut不要将多字节字符拆开
cut -d : -f 1 -d设置间隔符
cut -d ' ' -f 1 设置间隔符为空格

##函数声明
uasge(){echo ok}
##调试
sh -x 这将执行该脚本并显示所有变量的值。
sh -n 这将返回所有语法错误
##grep介绍
grep -c 输出匹配行计数
grep -i 不区分大小写
grep -h 查询多文件时不显示文件名
grep -H 显示文件名
grep -l 查询多文件时只输出包含匹配字符的文件名
grep -n 显示匹配行及行号
grep -s 不显示不存在或不匹配文本的错误信息
grep -v 显示不包含匹配文本的所有行(过滤文本)
##read
read -p "please input _" var
$# 位置参数的数量。
$* 所有位置参数的内容。
$? 命令执行后返回的状态。
$$ 当前进程的进程号。
$! 后台运行的最后一个进程号。
$0 当前执行的进程名。
其中,$?用于检查上一个命令执行是否正确。(

在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错。)
$$变量最常见的用途是用做暂存文件的名字以保证暂存文件不会重复。


lsb_release -a 查看系统版本

相关文档