您的位置:首页 > 运维架构 > Shell

shell学习笔记

2016-07-03 22:30 423 查看
du -sh | sort -nr


在文件中搜索文字 grep string file.txt

grep -v string file
反向搜索

grep  -n string file
输出行号

grep -c string file
输出多少行含有匹配模式

grep -e string1 -e string2 file
输出同时含有string1和string2的行。

压缩文件管理

压缩文件:

tar cvfj file.tar.bz   file
用tar打包文件并用bzip2创建压缩文件

tar cvfz file.tar.gz  file
用tar打包文件并用gzip创建压缩文件

zip -r file.zip file
用zip打包并压缩文件

压缩大型文件建议用bzip2,效果更好,三种方式都能兼容windows。

解压文件:

tar xvf file
解压tar、tar.gz、tar.bz文件

unzip  file
解压zip文件

unrar  e file
解压rar文件

我写了个脚本,可以解压,tar.gz, tar.bz, tar.xz, tar, zip, rar文件,可以根据需要扩展支持别的压缩文件。

#!/bin/sh
ftype=`file "$1"`
case "$ftype" in
"$1: Zip archive"*)
dir=${1%.zip}
mkdir $dir
  unzip $1 -d $dir
;;
"$1: gzip compressed"*)
dir=${1%.tar.gz}
mkdir $dir
tar xvf "$1" -C $dir
#   gunzip "$1"
;;
"$1: bzip2 compressed"*)
dir=${1%.tar.bz}
mkdir $dir
tar xvf "$1" -C $dir
#   bunzip2 "$1"
;;
"$1: XZ compressed"*)
dir=${1%.tar.xz}
mkdir $dir
tar xvf "$1" -C $dir
;;
"$1: RAR archive data"*)
dir=${1%.rar}
mkdir $dir
unrar x "$1"
;;
*)
echo "sorry! smartzip fail to support support decompression to file $1"
;;
esac


设置用户ID(SUID):当文件被用户使用时,程序会以文件属主的权限运行。

设置组ID(SGID):对文件来说,程序会以文件属主的权限运行;对目录来说,目录中创建的新文件会以目录的默认属组作为默认组。

给个详细说明的链接

dpkg -L samba
列出samba安装包的各个文件所在目录。

dpkg --search /etc/mysql/my.cnf
列出my.conf属于哪个安装包

aptitude show grub2-theme-mint
显示软件详情

aptitude install wine
安装软件

aptitude safe-upgrade
升级软件,检查依赖

aptitude remove wine
卸载软件,保留配置文件

aptitude purge wine
卸载软件,删除配置文件

shell 中的数学表达式

用于数学表达是的双圆括号是bash shell对数学表达式新的扩展:

#!/bin/bash

val1=10
if (( $val1 ** 2 > 90 ))
then
((val2=$val1 ** 2))
echo "The square of $val1 is $val2"
fi


#!/bin/sh
#简单的加减乘除
var3=$[20 / 10]
var1=1
var2=2
result=$[$var1 + $[$var2 * $var3]]
#设置结果保留4位小数,浮点书借用系统自带的bc,没有bc的同学不建议先安装一份
result=`echo "scale = 4; $var1 / $var2" | bc`
echo The result is $result

#比较长的数学表达式可以这样做
var1=10.46
var2=43.67
var3=33.2
var4=71

var5=`bc << EOF
scale=4
a1 = ( $var1 * $var2)
b1 = ($var3 * $var4)
a1 + b1
EOF
`
echo The result is $var5
exit 0


if命令只能判断有退出状态吗的条件,比如执行某个系统命令,例:

#!/bin/bash
user=edfa
if grep $user /etc/passwd
then
ls -l /home/$USER/*.b*
else
echo The user $user does not exists on the system!
fi


如果要进行数值比较、字符串比较、文件比较,应该借助于test命令。

test命令的数值比较功能如下:

n1 -eq n2 检查n1是否等于n2

n1 -ge n2 检查n1是否大于或等于n2

n1 -gt n2 检查n1是否大于n2

n1 -le n2 检查n1是否小于n2

n1 -lt n2 检查n1是否小于n2

n1 -ne n2 检查n1是否不等于n2

只能比较整形

给个demo:

#!/bin/bash
#注意中括号旁边的空格
if [ 10 -lt 11 ]
then
echo 10 lest than 11
fi


test命令的字符串比较功能如下:

str1 = str2 检查str1是否等于str2

str1 != str2 检查str1是否不等于str2

str1 < str2 str1是否小于str2

str1 > str2 str1是否大于str2

-n str1 检查str1的长度是否非0

-z str1 检查str1的长度是否为0

#!/bin/bash
str1=a
str2=b
if [ $str1 = $str2 ]
then
$str1 equals $str2
elif [ $str1 != $str2 ]
then
echo $str1 not equals $str2
fi
~


13.文件比较

-d file 检查文件是否存在并是一个目录

-e file 检查file是否存在

-f file 检查file是否存在并是一个文件

-s file 检查file是否存在并非空

-r file 检查file是否存在并可读

-w file 检查file是否存在并可写

-x file 检查file是否存在并可执行

-O file 检查file是否存在并属于当前用户所有

-G file 检查file是否存在并所属组为当前用户组

file1 -nt file2 检查file1是否比file2新

file1 -ot file2 检查file1是否比file2旧

14.switch case 的使用

#!/bin/bash
val=1
case $val in
1 | 2)
echo "match 1 or 2";;
3)
echo "match 3";;
4)
echo "match 4";;
*)
echo "mathc $val";;
esac
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell