坚持#第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分钟
- 坚持#第240天~shell脚本2
- 坚持#第239天~Shell脚本
- 坚持#第241天~shell脚本3
- 坚持#第242天~shell脚本4
- 坚持#第243天~shell脚本5
- 坚持#第238天~开始接触shell脚本了
- 坚持#第107天~坚持!
- 坚持#第250天~PXE无人值守自动装机脚本
- 坚持#第19天~
- 坚持#第42天~
- 坚持#第43天~
- 坚持#第44天~
- 坚持#第45天~
- 坚持#第46天~
- 坚持#第50天~
- 坚持#第51天~
- 坚持#第52天~
- 坚持#第54天~
- 【广告算法工程师入门 30】从RD的核心能力闲谈到增加广告收益的十八般武艺
- codeforces 894A
- 409. Longest Palindrome
- 大数据正式23
- 各种大数算法
- 坚持#第240天~shell脚本2
- codeforces 893 C.Rumor
- jQuery Validate
- SQLite(4) SELECT 基本组合用法大全
- Java浮点数float,bigdecimal和double精确计算的精度误差问题总结
- 单链表(结构体与类实现)
- HDOJ1673 Optimal Parking
- Zookeeper ZAB 协议分析及算法
- 常见排序算法的讲解