shell入门

shell基础知识
硬件-》系统核心-》命令解释器-》外围应用程序

查看默认shell
cat /etc/passwd | head -1
echo $SHELL

建立脚本
#!/bin/bash 指定解释器
#!幻数


#!/bin/bash
yum repolist
yum install httpd -y
systemctl enable httpd
systemctl start httpd
systemctl status httpd
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
firewall-cmd --list-all

脚本缺陷
1用户判断
2是否执行


#!/bin/bash
LOG_DIR=/var/log
ROOT_UID=0

if ["$UID" -ne "$ROOT_UID"];then
    echo "ERROR:you should be root to run this script!"
    exit 1
fi

cd $LOG_DIR || {              #|| 前面的运行了,就不运行后面的了,二选一
    echo "CANNOT access to directory"
    exit 1
}                 

cat /dev/null > messages && {
    echo "Logs cleaned up."
    exit 0            #正常退出0  异常退出1
}


echo "Logs cleaned failed..."
exit 1

查看系统环境变量
env


脚本执行方法
1 sh script.sh | bash name.sh 没有执行权限时使用
这时执行 是新打开一个shell执行完再返回数据,这时候并不会在现在的shell中可以使用这些值,就会变为空  比如$username

2 /path/to/name.sh  |  ./script.sh  绝对路径,当前目录

3 source name.sh | . script.sh 把执行后产生shell的值或函数传回原来的shell继续使用


leetcode


func WESTOS()
        call append(0,"# Author: wsp".("      "))
        call append(1,"# Version:              ".("      "))
        call append(2,"# Mail:         ".("              "))
        call append(3,"# Date:         ".strftime("%Y-%m-%d").("    "))
        call append(4,"# Description:      ".("          "))
        call append(5,"#                  ".("           "))
        call append(6," ")
        call append(7,"#!/bin/bash")
endfunc


cat /etc/shells

a=hello     不能定义有空格的
b='hello'   默认不解析''里面的东西,原样输出
c="hello"   可以定义有空格的

###特殊变量
$0        
代表脚本本身 执行后,sh执行获取名称  绝对路径执行会获取路径
$n    ${10}
要大于0,任意一个数  执行参数  写几个 执行的时候就要写几个变量    
$#   表示后面输入参数的个数    
$*    获取所有参数    
$@    获取所有参数
$?      检测是否成功 0表示执行成功
$$    获取当前shell进程号

read用法
read -p "请输入一个整数:" i
10
echo $i

日志目录打包成当天日期
#!/bin/bash
time=`date +%Y-%m-%d`    date +%F  一样
tar zcf log_${time}.tar.gz  /var/log/messages

变量值的计算
bc 计算器
echo 1.23+3.3 | bc
echo "scale=3;1.11*2.22" |bc
scale保留位数


a=10
expr $a + 10
expr $a \* 10  乘法需要转义
expr $a / 10   除法
echo $[a*1]  不需要转义
echo $((a*1))

let会更改值
let a+=10
这时a=20

echo a-b=`echo "$a*$b" |bc`
echo "a-b=$[a-b]"

#!/bin/bash
read -t 5 -p "输入两个整数"  a b
#a=$1
#b=$2
echo a-b=`echo "$a-$b" |bc`
echo a*b=`echo "$a*$b" |bc`
echo a+b=`echo "$a+$b" |bc`
echo a/b=`echo "scale=3;$a/$b" |bc`
echo a^b=`echo "$a^$b" |bc`
echo a%b=`echo "$a%$b" |bc`


但是[]  ()中的幂函数用**

grep  sed  awk

grep  
egrep= grep -E
grep -i  忽略字母大小写
     -v  条件区反
     -c  统计匹配行数
     -q 静默无输出
     -n 显示匹配结果所在的行号
     -m10 只看结果的前10行
egrep '^root|^daemon' /etc/passwd
grep '172.25.254.250' /etc/hosts && echo 'yes'||echo 'no'

glob 
^匹配开头
&匹配结尾
.匹配任意字符  
'.'可过滤非空行
-v '.'  或者 '^&' 过滤空行
[]匹配括号内的字符
[^a] 不匹配a

基本元字符  + ? *
'n+'  至少一个n
'color(ful)?'  最多一次出现(ful)
* 所有 不管几次


匹配次数
{n} n次
{n,m}  n-m次
或的匹配,出现括号里面的都会匹配
[ab]
[A-X]


cut  -d: -f 1,7 /etc/passwd
显示1-7列  以:为分隔符
cut -c 1,4 /etc/passwd
显示1-4列的字符


过滤自己的ip
ifconfig |egrep -m1 'inet '| cut -c 14-25
ifconfig eth0 |egrep -m1 'inet '| cut -d " " -f 10
ifconfig |egrep -m1 'inet '| awk '{print $2}'


判断是否ping成功
ping 172.25.254.11 -c1 -w1 &> /dev/null && echo '172.25.254.11 is up' || echo '172.25.254.11 is down'


sort 排序
    -n 纯数字排序(按大小)
    -r 倒序
    -u 去掉重复数字
    -o 输出到制定文件
    -t 制定分隔符
    -k 制定要排序的列
sort t : -k 2 /path 你找出他的分隔符然后选择你要排序的列为2

ps -ax  -o %cpu,pid --sort=-%cpu |grep -v PID|head -n 5


uniq  对重复命令处理
    -u显示唯一的行
    -d显示重复的行
    -c每行显示一次并统计重复次数
    
ctrl+v  块可视化
shift+v  行可视化

ls -Sl /tmp| head -n 2|cut -d ' ' -f 9
ll /tmp | sort -r -t ' ' -k 6| head -n 1|cut -d ' ' -f 9

ll /etc | sort  -t ' ' -k 4| tail -n1|grep -m2 '.*'|cut -d ' ' -f 19

ls -Sl 排大小

test 命令

test "$a" == "$b"
[ 1 -eq 2 ]
[ "$a" = "$b" ]   !=不等于 -ne
-le 小于等于
-ge 大于等于
-gt 大于
-lt 小于
-ne 不等与
-eq等于
-a  与
-o  或
-z 是否为空(zero)  为空则继续运行&&后面的,返回1
-e "file" 存在
-f "file" 是否普通文件
-b "   "  块设备
-S        套接字
-c        字符设备
-L        软件接

1输入是否为空
2是否在10以内
3  1<$a<10 -->yes
4 $a<1  $a>10 -->no
#!/bin/bash
#判断数字是否在10以内
[ -z "$1" ]&&echo no&&exit 0||[ "$1" -lt 1 ] &&echo 'no' && exit 0|| [ "$1" -gt 10 ] && echo 'no' && exit 0||echo yes &&exit 0


判断文件类型
#!/bin/bash
[ -z "$1" ]&&echo input a file&&exit 1
[ ! -e "$1" ]&&echo  file not exist&&exit 1
[ -f "$1" ]&&echo f&&exit 0
[ -b "$1" ]&&echo b&&exit 0
[ -S "$1" ]&&echo S&&exit 0
[ -C "$1" ]&&echo c&&exit 0
[ -L "$1" ]&&echo L&&exit 0
[ -d "$1" ]&&echo d&&exit 0

lftp mirror拷贝目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值