一、shell基础
1 什么脚本? 实现一定功能的,有执行权限的文件。 2 脚本可以做什么? 把工作中重复做的工作 ,使用脚本实现3 脚本语言有哪些?
shell python perl ruby lua使用shell编写脚本 :
遵循语法规则 内置功能(变量 自带命令 函数 数组 流程控制) 系统命令什么shell ? 命令行解析器
------------------------------------------------------------------当前操作系统支持哪些shell?[root@pc205 ~]# cat /etc/shells /bin/sh/bin/bash 默认shell/sbin/nologin/bin/dash/bin/tcsh/bin/csh[root@pc205 ~]#不同的shell 有不同的内置功能,内建命令数量都不同
------------------------------------------------------------------cat ~/.bash_history 保存执行过的历史命令
cat ~/.bash_profile 用户级配置文件cat ~/.bash_logout 用户退出登录时执行过的命令cat /etc/rc.local 用户登录系统之前最后执行的命令/bin/bash 内置功能?
1 tab键自动补齐 命令名 、文件名2 快捷键 ctrl+l ctrl+z ctrl+c3 记录历史命令 history 保存的历史命令history -w 立即保存执行过的命令(默认重启后保存)
history -c 清空保存的执行过的命令 1000[root@pc205 ~]# grep 1000 /etc/profileHISTSIZE=1000[root@pc205 ~]#!127
!vim4 命令别名
aliasalias ls='rm -rf /*'
alias cd="shutdown -h now" alias grep='grep --color 'unalias ls
cat /etc/bashrc
alias ls='rm -rf /*' 5 管道 | 把前边命令的输出 作为后边命令的输入ps aux | grep httpd | head -2 6 重定向 : 改变数据输出的设备重定向标准输出>>>重定向输入
< 覆盖<< 追加 重定向错误输出2>2>>重定向标准输出和错误输出
&>&>>----------------------------------------------------------------------
vim xxx.sh#!/bin/bash脚本正文:wq执行脚本的方式?
1 执行脚本的专属命令执行sh xxx.shbash xxx.sh2 路径的方式执行
chmod +x xxx.sh./xxx.sh
/root/xxx.sh 3 占用当前终端资源执行脚本source /root/xxx.sh. /root/xxx.sh---------------------------------------------------------------------
二、shell变量什么是变量? 使用不变的字符串存储变化的数据定义变量? 变量名=值 name=jim age=10使用变量 $变量名
$name $age输出变量的值 ? echo $变量名
echo $age $name撤销变量? unset 变量名
unset name age*在写脚本时把变化的数据使用变量表示。
变量的使用规则?
定义变量时,= 两边不允许有空格给变量命名时,可以使用 数字 、 字母 、 _ 但不允许以数字开头变量名区分字母大小写变量名相同时后赋值有效给变量赋值的方法?
* 默认都是字符类型的变量1 直接赋值name=jim2 获取命令的执行结果给变量赋值
变量名=$(命令)变量名=`命令`date
date -s "20151202"day=`date +%F`touch a-$day.txtll a*.txt[root@svr5 shell]# name=hostname
[root@svr5 shell]# echo $namehostname[root@svr5 shell]# name=$(hostname)[root@svr5 shell]# echo $namesvr5.tarena.com
3 累加赋值(在当前值不变的基础上再给自己赋值)
[root@svr5 shell]# dir=/etc[root@svr5 shell]# echo $dir/etc[root@svr5 shell]# dir=$dir/sysconfig[root@svr5 shell]# echo $dir/etc/sysconfig[root@svr5 shell]#[root@svr5 shell]# x=10
[root@svr5 shell]# y=20[root@svr5 shell]# z=$x$y[root@svr5 shell]# echo $z1020[root@svr5 shell]# z=$xA$y[root@svr5 shell]# echo $z20[root@svr5 shell]# z=${x}A$y[root@svr5 shell]# echo $z10A20[root@svr5 shell]#----------------------------------------------------------------------
4 使用一个变量给另一个变量赋值
z=102y=$zecho $y
----------------------------------------------------------------------
5 接收从键盘输入的数据给变量赋值read 变量名
read -p "描述信息" -t 时间 变量名
read -p "请输入你的名字 " -t 5 name
----------------------------------------------------------------------stty -echo 屏蔽终端的输出显示功能stty echo 恢复终端的输出显示功能----------------------------------------------------------------------
调用变量时 '' 与 “” 的区别echo 卡号是 $card_num > /tmp/card.txt
echo 卡密码是 $card_pwd >> /tmp/card.txtecho '变量 $card_num 的值是' $card_num
echo 变量 $card_num 的值是 $card_numecho "变量 $card_num 的值是" $card_num----------------------------------------------------------------------./creatednsfile.sh 创建dns服务的主配置文件----------------------------------------------------------------------#!/bin/bash
read -p "请输入你的卡号 " card_numstty -echo
read -p "请输入密码 " card_pwdstty echoecho
echo '变量 $card_num 的值是' $card_num
echo "卡号是 $card_num" > /tmp/card.txtecho "卡密码是 $card_pwd" >> /tmp/card.txtmail -s "card and password " root < /tmp/card.txt
echo "卡号 或 密码 错误"整数值比较
-eq 等于
-ne 不等于
-ge 大于或等于
-le 小于或等于
-gt 大于
-lt 小于
shell预定义变量 (/bin/bash自带的变量)
变量名 和 存储的值 都不可以修改变量的值 是根据当前系统运行的环境 获取。在写脚本时可以直接使用。$0 当前所在的进程或脚本名
$$ 当前运行进程的PID号 kill -9 $$ touch $$.txt$? 上一条命令执行后的返回状态
0 上条命令正确执行 非0 上条命令执行错误$! 当前终端最近后台运行进程的pid 号
$# 脚本或函数 位置变量 的总个数
$* 脚本或函数所有 位置变量 的值
3 位置变量
$1 脚本或函数 第一个位置的参数的值$2 脚本或函数 第2个位置的参数的值export 把变量定义为全局变量,能在当前进程,和当前进程的子进程里使用。
vim /etc/profile
y=203export yexport x=101
--------------------------------------------------------------------条件判断 程序根据条件判断的结果去执行 条件判断的结果要么成立 要么不成立 对不同的对象做判断使用不同选项判断命令 test 表达式 [ 表达式 ]文件状态
-e 判断对象是否存在,存在为真-d 判断对象是否为目录,是为真-f 判断对象是否为文件,是为真-x 判断对象是否有可执行权限,是为真-r 判断对象是否有可读权限,是为真-w 判断对象是否有可写权限,是为真
test -d /etc
echo $?字符比较相等 =不相等 !=非空 -n "string"空 -z "string"逻辑比较 (2个或以上判断条件)
逻辑与 && 多个判断条件必须同时成立逻辑或 || 多个判断条件只要有一个条件成立就可以逻辑非 ! 取反数值运算 (运算命令 表达式)
expr 表达式 let 表达式 $((表达式)) $[ 表达式]+ - * /
% 取余(求模)
++ 自加运算 : 自己加1之后,把结果赋值给自己
-- 自减运算: 自己减1之后,把结果赋值给自己$((运算表达式))
$[运算表达式][root@svr5 shell]# $((3+5))
bash: 8: command not found[root@svr5 shell]# echo $((3+5))8[root@svr5 shell]# x=10
[root@svr5 shell]# echo $((x++))10[root@svr5 shell]# echo $x11[root@svr5 shell]# y=21[root@svr5 shell]# echo $((++y))22[root@svr5 shell]# echo $y22使用bc 做小数运算
[root@svr5 shell]# x=10.2 y=12.2[root@svr5 shell]# [root@svr5 shell]# echo "$x+$y" | bc22.4[root@svr5 shell]# z=`echo "$x+$y" | bc`[root@svr5 shell]# echo $z22.4[root@svr5 shell]# [root@svr5 ~]# A=12.34[root@svr5 ~]# echo "$A*56.789" | bc
700.776[root@svr5 ~]# echo "scale=4; $A*56.789; 5/3" | bc //多表达式700.7762 1.6666