shell基础

shell:
shell是linux内核和应用程序间的解释程序,向内核翻译及传达用户和程序的指令
正则表达式 \w \s \d \b 用法:
. 匹配除换行符以外的任意字符 
\w 匹配字母或数字或下划线 
\s 匹配任意的空白符 
\d 匹配数字                      等价于[0-9]
\D 匹配非数字字符
\b 匹配单词的开始或结束 
^ 匹配字符串的开始 
$ 匹配字符串的结束
其中,[^A-Z]表示除了不包含大写字母,^取反;^[A-Z]表示以大写字母开头
shell 脚本提前写好的可执行语句.
使用变量$X 变量失效uset X
示例:
#!/bin/bash
useradd $a 2> /temp/err.log
echo 1234567 | passwd --stdin $1 &>/dev/null
ls -l ./ | wc -l
统计问文件的数量

$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

#!/bin/bash
dir="/root/chrom"
fi [! -e $dir]
then mkdir -p $dir

#!/bin/bash
#-c 3 发送三个测试包 -i 0.2 时间间隔 -W 1等待时间 $1 获得终端输入
ping -c 3 -i 0.2 -W 1 $1 &> /dev/null
if [ $? -eq 0 ] ; then
echo "host $1 is up"
else
echo "host $1 is down"
fi


#!/bin/bash
#把输入读入 JF
read -p "请输入积分 (0-100):" JF
#要有空格
if [ $JF -ge 90 ] ;then
echo "$JF 分 "
elif [$JF -ge 80]; then
echo "$JF 分"
fi

创建并进入目绿:
mkcd(){
mkdir $1
cd $1
}
循环:
for i in $sun

case : 以;;结束分支
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。

for i in {1.10}
do
experss
done

检测多个主机的存活状态:
# 范围用 ..
for i in {1..254}
do
ping -c 3 -i 0.2 -W 1 192.168.3.$i &> /dev/null
if [ $? -eq 0];then
echo "Host 192.168.3.$i is up"
else
echo "Host 192.168.3.$i is down"
fi
done


i=1
while [ $i -le 5]
do
echo
done
#[] 表达式
num = $[RANDOW%100+1]
while :
do
read -p " input 1---100:" guess
if [ $gess -eq $num ];then
echo " good"
else
echo "bad"
fi

列出不在线的主机:
i=1
while [ $i -le 254 ]
do
ip="192.168.3.$i"
#2> /dev/null” 代表忽略掉错误提示信息。
# 不显示ping的信息 &> /dev/null
& 是等于的意思
ping -c 3 -i 0.2 -W 1 $ip &> /dev/null
if [ $? -eq 0 ];then
echo "Host is up"
fi
let i++
done


中断:
for i in {1..254}
do
[ $i -eq 3]&&break
done
echo " over "


球和:
sum=0;
while:
do
read -p "inpout 0 is end:" x
#&&左边的命令(命令1)返回真(即返回0,成功被执行)后,&&右边的命令(命令2)才能够被执行;
#||则与&&相反。如果||左边的命令(命令1)未执行成功,那么就执行||右边的命令(命令2);或者换句话说,“如果这个命令执行失败了||那么就执行这个命令。
[ $x -eq 0] && break
sum=$[sum+x]
done
echo "sum is $sum"
字串截取:
${var:起始位置:长度}
expr substr "$var" 起始位置 长度
echo $var | cut -b 起始位置 长度

字串一个替换:
${var/old/new}
替换全部
${var//old/new}

字符串掐头:从左网友
${var#*key}
${var##*key} 删除匹配最远的
字符串去尾: 从右往左
${var%key*}
${var%%key*}
MDIR="/var/spool/mail/root"
echo ${MDIR%o*}



批量修改后最名:
for FILE in *.doc
do
mv $FILE ${FILE%.doc}.txt
done

初值检测:
取值: ${var: -word}
echo ${NM:-Tatrena}

球和:
read -p "input num:" x
x=${x:-1};i=1;sum =0
while [ $i -le $x ]
do
let sum+=i;let i++
done

数组:
数组名=(val1 val2 val3...valn)

取值: ${arry[index]}
${arry[@]}
${#arry[@]}
${arry[@]:b_index:len}

expect 基于TCL编程写的自动交互程序

host=192.168.3.104
expect << EOF
spawn ssh $host
expect "password" {send "123456\r"}
expect "#" {send "touch /a.txt\r"}
expect "#" {send "exit\r"}

正则表达式:
egrep [option] 'exoress' file
前置命令 | egrep [选项] '则正式'
== grep
^ 匹配首字母 ^abc 以abc开头的
$ 匹配行尾 abc$ 以abc结尾
. 匹配单个 除换行符之外的任意单个字符
+ 一个或则多个
? 最多一个
* 匹配任意次

{n} 匹配n次
{n,m} 匹配n-m 次
{n,} 匹配至少n次
\<th 匹配以th开头的单词
\<root\> 结尾 和\broot\b 一样




posted @ 2019-06-01 15:05  countryboy666  阅读(98)  评论(0编辑  收藏  举报