坚持#第240天~shell脚本2

来源:互联网 发布:里德学院知乎 编辑:程序博客网 时间:2024/05/29 05:02

计算4.3*9.2不能用$(())

 

四个环境变量文件分别是什么:

/etc/bashrc

/etc/profile

/root/.bash_profile

/root/.bashrc

 

如何测试4个环境变量,提示:可以在那4个文件里面写输出语句

文件添加标记,运行的时候会出现

vim /etc/bashrc

echo “/etc/bashrc”(开机的时候会执行,重新开启一个新的终端也会运行)

vim /etc/profile

echo “/etc/profile”

vim /root/.bash_profile

echo ‘/root/.bash_profile’

vim /root/.bashrc

echo ‘/root/.bashrc’

要切换到jim里面去修改家目录才会有家目录的输出

 

echo $USER为什么在root里面的结果是root,在jim用户里面的结果是jim

/etc/bashrc里面有USER

 

grep “mount /mnt/sr0/mnt/centos7u3” /etc/rc.d/rc.local ||(有这个内容后面的就不执行了) echo “mount /dev/sr0/mnt/centos7u3” >> /etc/rc.d/rc.local

cat >/etc/yum.repos.d/centos7u3 << ok

[localyum]

name=centos7u3

baseurl=file:///mnt/centos7u3

gpgcheck=0

enabled=1

ok

 

&> /dev/null丢到垃圾桶

 

搭服务的时候的准备工作(关闭防火墙...)

mkdir /scripts

vim /scripts/fireAuto.sh

systemctl stop firewalld

systemctl disable firewalld

systemctl stopNetworkManager

systemctl disableNetworkManager

setenforce 0

我忘记了selinux怎么永久关闭啊,在配置目录里啊,不能用追加重定向

 

自动配置yum源,看到配置二字,肯定是在配置目里面啊

vim /scripts/yumAuto.sh

echo -e “[localyum]\nname=centos7u3\nbaseurl=file:///mnt/centos7u3\ngpgcheck=0\nenabled=1”>> /etc/yum.repos.d/localyum.repo

mkdir /scripts

umount /dev/sr0

mount /dev/sr0/mnt/centos7u3我忘记挂载在哪儿了啊

yum clean all

yum repolist

 

位置变量:

echo “$1”

echo “$2”这就是一些特殊变量不让使用数字开头的原因

./test.sh 1 2 3结果是

1

2

3

${10}

 

echo ‘$0’ “是$0”

echo ‘$*’ “是$*”

echo ‘$@’ “是$@”

echo ‘$#’ “是$#”

echo ‘$$’ “是$$”

echo ‘$?’ “是$?”

./test.sh 1 2 3 4 5结果是

$0:shell名字

$*:1 2 3 4 5所有的参数

$@:1 2 3 4 5所有的参数

$#:5参数的个数

$$:当前进程的pid

$?:上一条命令的返回值   0正确执行 真; 

非0(1~255) 假:命令错了是127,没有目录或文件是2或1

Mkdir /tmp

echo $?结果是127

 

变量定义的方式:

1、显示赋值

num=1000最直接的

read -p “你的年龄:” age    这个是输入语句

read -p “你的年龄:”  -t 5  age指定超时时间,单位是秒【注意:这个变量必须要放在最后面】

read -p “你的年龄:”-n 2 age  指定字符个数最多输入两位【注意:这个变量必须要放在最后面】

read -p “你的年龄:” -s age 是不会显示输入的内容【注意:这个变量必须要放在最后面】

 

type 命令   可以查看命令是属于内嵌还是/usr/bin里面的,若是内嵌就只能用命令 --help才能查看使用方法,比如type read

 

stty -echo回车

敲任何东西都看不到,-echo是去掉回显

恢复:stty echo

 

题目:让用户输入QQ号和密码,将用户输入的QQ号和密码保存到/tmp/pass.txt(6位密码)

vim /scripts/qq.sh

read -p “please input yourqq:” qqid

read -p “please input yourpassword:” -n 6 qqmima

echo可以换行

echo “${qqid}, ${qqmima}”>> /tmp/pass.txt

echo “${qqid}, ${qqmima}” |mail -s “title” root 或

echo “${qqid}, ${qqmima}”>> /tmp/bank.txt

mail -s “title” root<< /tmp/bank.txt

 

发邮件发邮箱

mail回车

输入数字可以查看,最新的是最大的数字

cat /var/spool/mail/root

 

NetworkManager启动才能开启nmtui

 

 

4.Shell数值运算,变量运算?

bc是交互式,想要为非交互式怎么办?(使用管道啊)

echo “1+2+3;5.4*8” | bc

1*3*5*...*99算出来的数值过大不能显示出来

seq 奇数或偶数

··反引号不能用作计算

考点:

expr 1 + 5两边要写空格

expr 1 \* 3乘法和除法要用到转义

expr 5.4 \* 2 非整数参数(不能计算小数)

echo $((2**8))是2的8次方

echo $((2^8))或运算

let变量运算

num=5+11

echo $num结果是5+11

let num=5+11(注意let的等号右边必须是一个值,比如用$:$num1)

echo $num结果是16 

echo "scale=2;10/3"| bc精度限制要写在最前面

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.Shell的条件测试test?

 

6.流程控制if?

 

7.模式匹配case?

 

8.循环for   while   until?

 

9.循环控制 exit   break   continue?

 

10.expect shell脚本交互式操作?

 

11.函数?

 

12.数组?

 

13.正则表达式?

 

14.sed?

 

15.awk?

 

 

 

 

 

 

 

 

 

 

作业:

bilibili的马哥教育

凡哥笔记1就剩作业了(留着和吴老师发的面试题一起看)

权限不够为什么?如果加上权限执行的效果是怎么样的?原因?

 

 

 

 

写点名脚本CAT

提示位置变量

 

1. 写一个脚本,如果执行脚本名jim  将jim的信息追加到/tmp/test.txt文件中,并要求每一行的行首有行号,如果执行脚本名tom  将tom的信息追加到/tmp/test.txt文件中,并要求每一行的行首有行号,如果执行脚本名jack  将jack的信息追加到/tmp/test.txt文件中,并要求每一行的行首有行号

vim user.sh

username=$USER

grep -n “^$USER” /etc/passwd>> /tmp/test.txt保存退出

chmod +x /scripts/user.sh

alias jim=“sh /scripts/user.sh”

alias tom=“sh /scripts/user.sh”

alias jack=“sh /scripts/user.sh”

 

2.如果这个目录不存在就创建这个目录

ls /test &> /dev/null|| mkdir /test

 

3.统计/var/log目录下文件个数

ll /var/log | grep -c"^-"

 

4.统计出apache(httpd)的access_log中访问量最多的5个ip

cut -d" " -f1/etc/httpd/logs/access_log | grep -v ":" | sort | uniq -c | sort |tail -5 | tr -s " " | cut -d" " -f3

 

5.符号连接和硬连接的区别(百度、简化、变成自己的、写在笔记上)

创建硬链接不需要加-S选项,而软链接则需要加-S选项;

创建硬链接时不会产生新的inode,而软连接会;

硬链接不能跨文件系统创建,而软链接可以;

硬链接换了一个,另一个还能使用,而软连接坏了源文件则连接的文件就不能使用了;

硬链接的对象只能是文件,而软连接的对象既可以是文件,又可以是目录。

硬链接的文件类型是普通文件,而软连接的文件类型是软连接文件

 

6.linux挂载windows共享文件夹

使用samba

useradd samba61

smbpasswd -a samba61首先要有samba用户

mkdir /share-test

chmod o+w /share-test

vim /etc/samba/smb.conf

[hello]

comment=this is share-testdir

path=/share-test

read only=No

valid users=samba1

保存退出

systemctl restart nmb

systemctl restart smb

在客户端中打开运行窗口Win+R,并输入\\192.168.1.61\

 

7.编写脚本实现一个计算器

./js.sh 5+4

9

./js.sh 4+5+6

15

 

解:

法一:利用bc计算器

#/bin/sbin

#ji suan qi

vim js.sh

echo"scale=2;${1}" | bc

chmod +x js.sh

法二:不利用bc计算器

#/bin/sbin

#ji suan qi

echo "$[${1}]"

chmod +x js.sh

 

 

8.编写一个脚本给出系统的当前时间和已经运行了多长时间,并且列出所有登陆系统的用户,最后脚本还会将这些信息写入一个日志文件/tmp/user.log

vim time.sh

#/bin/sbin

#yun xing shijian   user

time=$(last reboot | head -1| cut -d"(" -f2 | tr -d ")")

user=$(w | tr -s "" | cut -d" " -f1 | grep -v "USER" | sort -r | tr -s"\n"     | uniq -c | tr -s" " | cut -d" " -f3)

echo -e "当前时间是$(date),系统已运行的时间为$time,所有登陆系统的用户有:$use    r" >> /tmp/user.log

[root@server scripts]# bashtime.sh

[root@server scripts]# cat/tmp/user.log

当前时间是2017年 12月 12日 星期二19:50:26 CST,系统已运行的时间为10:34    ,所有登陆系统的用户有:root

 

已经运行了多长时间last boot

所有登陆系统的用户w

 

 

3个测试题:

9.

cat a.sh

#!/bin/bash

#test

export x=1

echo “IN a.sh”

echo $x

./b.sh

 

cat b.sh

#!/bin/bash

#test

echo “IN b.sh”

echo $x

 

权限不够为什么?如果加上权限执行的效果是怎么样的?原因

bash a.sh

IN a.sh

1

a.sh:行6:./b.sh:权限不够

 

解:

使用相对路径去执行脚本,若没有执行权限就不能执行,

加上执行权限:chmod +x b.sh,效果是

IN a.sh

1

IN b.sh

1

 

10.将a.sh中的export去掉,重新执行a.sh脚本

IN a.sh

空的

IN b.sh

空的

 

11.在测试2的基础上,去掉b.sh的x权限,但还是想要达到想要的显示结果

chmod -x b.sh

vim a.sh

. b.sh

 

12.点名脚本

vim dianming.sh

#!/bin/bash

#dianming

echo -e"litao\nchenzhe\nyuanyong" > /scripts/dianming.txt

x=$(grep -n ""/scripts/dianming.txt | tail -1 | cut -d":" -f"1") random=$[RANDOM%${x}+1]

grep -n ""/scripts/dianming.txt | grep "$random" | cut -d":" -f2

保存退出

bash dianming.sh

 

13. 制作随机数,随机数的范围是5~50

echo $[RANDOM%46+5]

 

8个题目+3个测试(手机照片)+2个题目(点名和随机数)

 

3个小时10道题:每个小时5道题,1题12分钟
原创粉丝点击