【美高梅手机版4858】shell_script一

By admin in 美高梅手机版4858 on 2019年4月10日

1、简介

1、简介

shell_script1,shellscript

1、简介 贰、read 三、运算工具 4、if/then结构 五、while循环 六、for循环  
1、简介 一、什么是shell
shell是用户与系统交互效用的界面。shell是一种命令解释程序,同时也是一种高级程序设计语言
二、shell常见系列 Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again
Shell(/bin/bash) C Shell(/usr/bin/csh) K Shell(/usr/bin/ksh) Shell
for Root(/sbin/sh)
个中:Bash在平时工作中被相近采纳;同时,Bash也是半数以上Linux系统默许的Shell;
三、shell局限性
壹.1、须求消耗多量财富的任务,特别是对举行过程供给较高的场地1.二、涉及大气的数学计算 1.3.、关键性应用(数据库,网址等)
一.肆.、设计图纸也许GUI的行使 壹.伍.、需求直接待上访问硬件
一.陆.、开发闭源的接纳(相对于开源) 肆、基础 文件系统:Linux
的文件系统是多个暗含了目录和文件的分支的组织结构,位于最上方的号称根目录(root
directory),用斜杠/ 来表示 目录:
是1种含有目录项的文本,每一个目录项中都涵盖了文本名 文件名:
目录的始末称为目录项,目录项包罗了文本名,唯有两种字符不容许出现在文书名中:斜杠,空字符(ASCII
值为0),斜杠用于分隔路径中的文件名,空字符用来代表路径的终极。文件名的长短一般能够高达251个字符
路径:
一文山会海文件名连起来,用斜杠分隔,就称为路径,路径用于表示文件的岗位;以斜杠开头的门路叫做相对路径,不然为相对路径,相对路径相对于当前工作目录
再次回到码:全体命令都有三个重回值,用0-255以内的整数来代表;脚本就是3个命令,它也有重返值,其余,脚本里面的函数也有重返值
退出脚本的正规方法是大名鼎鼎地用命令exit [code]来退出,如:exit 0;exit $?
  二、read 一、定义
read是二个buildin命令,主要形成对参数的赋值,类似C语言中的scanf;
其不但能够赋值变量,还足以赋值数组;
其输入不仅是荧屏,还足以是文本讲述符 二、实际操作 # read a
–输入字符串,将字符串赋值给变量 a;# echo $a hello world!! # read
name sex age –同时分别给多少个变量赋值,输入分隔符私下认可为 空格符 zhangsan
male 50 # unset name sex age –删除变量 # IFS=’;’ –将 read
的输入分隔符改为 ‘;’ # vim test.sh #!/bin/bash prompt=”Please enter
your name:” read -p “$prompt” name echo “Greetings $name”   三、运算工具
一、不难数学生运动算 # echo $((1+2**2-3*4/五%六)) –输出计算结果到荧屏 #
a=$((1+2**2-3*4/伍%陆)) –把总括结果赋给变量a #
((a=1+2**2-3*4/5%6)) –同上 # echo “scale=三;十/叁” | bc
–bc总计器;保留小数点后三人 # echo “2^10” | bc
–bc计算器;计算2的10次方 # awk ‘BEGIN{print 1/3}’ –awk总括2、获取随机数 # od -N4 -tu4 /dev/urandom | sed -n ‘1s/.* //p’
–获取二个多个人数的数码 # od -Ad -w贰四 -tu4 /dev/urandom –获取随机数 #
od -tu八 /dev/urandom –获取随机数 # od -tu8 /dev/urandom | sed -r
‘s/^[0-9]+\s+//’ | sed -r ‘s/\s+/\n/g’ |cut -b一-八 |sed -r -n
‘/^.{8}$/p’ | sed ‘s/^/186/’ |head -n伍仟 |vi – –获取30000个电话号码 #
od -N40000 -tu4 /dev/urandom | sed -r ‘s/^[0-9]+(\s+)?//’ | sed -r
‘s/\s+/\n/g’ | grep -vE ‘^\s*$’ > 10k_random –生成二万个随机数
# sed -r -n ‘/^.{8}$/p’ 10k_random | head -n 100000 | sed ‘s/^/186/’
> phone_num 三、获取数字类别 # seq 10 –获取1到10 # seq 1 2 10
–获取1到10,步长为2 # seq 10 100 –获取10到100 # seq 10 -一 壹–倒序,10到一   四、if/then实例 1、判断字符 “a” 是还是不是等于 “A” # vim
test.sh #!/bin/bash if [[ “a” = “A” ]]; then if [ “a” = “A” ];
then   echo “a equals A” else   echo “a no equals A” fi
贰、判断/root/test/test.sh是还是不是存在并具备可进行权限 # vim test.sh
#!/bin/bash if test -x /root/test/test.sh;then   echo
“/root/test/test.sh is executable” fi 叁、判断系统是还是不是留存 root 用户 #
vim test.sh #!/bin/bash if grep -E –color=auto ^root: /etc/passwd;
then   echo “user root exists” fi 四、判断文件类型 # vim test.sh
#!/bin/bash function isSymbolicLink() {   file=$壹   flag=$(ls -ld
$file | cut -b壹)   test “$flag” = “一”   return $? } file=$一 if
isSymbolicLink $file; then   echo “Symbolic Link” elif test -d $file;
then   echo “Directory file” elif test -f $file; then   echo
“Regular file” elif test -b $file; then   echo “Block special” elif
test -c $file; then   echo “Character special” elif test -p $file;
then   echo “Named pipe” elif test -S $file; then   echo “Socket”
else   echo “Unkown” fi 伍、判断输入数字的大小 # vim test.sh
#!/bin/bash num=$一 if test “$num” -lt 十 ;then   echo “小数字” elif
test “$num” -lt 20;then   echo “中数字” elif test “$num” -lt 30;then
  echo “大数字” else   echo “超大数字” fi
6、从行业内部输入获取一个数字,并依照其尺寸输出钦命字符串 # vim test.sh
#!/bin/bash echo -n “Enter a number: ” read num if [ “$num” -lt 100
]; then echo “小于100” elif [ “$num” -ge 100 -a “$num” -lt 200 ];
then echo “大于等于100稍低于200” elif [ “$num” -ge 200 -a “$num” -lt 300
]; then echo “大于等于200低于300” else echo “其余数字” fi  
五、wihle循环 一、认识 测试 while
关键字背后一条命令的重回码,条件为真时,程序读入while循环体中的指令;0为真。循环体如下:
while [] –while 前边运维 [ ] 命令,测试 [ ] 命令的回来码 cat
/filename | while read line       –while 前面运维read 命令,测试
read 命令的重临码 do …… done 2、循环控制语句 continue
–终止当前循环,起先下1个循环 break –终止当前轮回,并脱离循环体 exit
–终止当前剧本 叁、实例 # vim test.sh –区分 continue 与 break 的区别
#!/bin/bash while true do sleep 1 echo test continue/break echo done #
vim test.sh –区分 break 与 exit 的区别 #!/bin/bash while test -e
/data/test/test.sh do echo “exists” sleep 1 break/exit done echo “loop
end” # vim test.sh –寻找大家加以的路子,直到寻到截止 #!/bin/bash if
test $# -ne 1;then echo “wrong paraneter” >&2 exit fi path=$1 while
test ! -e “$path” do sleep 1 echo “don’t found!!!” done echo “found” #
vim test.sh –脚本运维钦赐的小运,时间一到就淡出;单位为 s #!/bin/bash
if test $# -ne 1;then echo “Usage: $(basename $0) TIME” >&2 exit 1
fi timeLength=$1 beginTime=$(date +%s) endTime=$(( $beginTime +
$timeLength )) ———————————————————
while test $(date +%s) -lt “$endTime” do echo “processing…..” sleep 1
done ——————————————————— while
true do if test $(date +%s) -ge “$endTime”;then break fi echo
“processing…..” sleep 1 done
——————————————————— echo “time
out” # vim test.sh –循环读取文件的每壹行,并盘算每行的字符个数

基准测试

shell 条件测试0为真,1为假

test

[ ] 

[[ ]]

参数之间利用空格隔开

测试命令

-d 存在且为目录

-f 存在且为普通文书

-z 字符串长度为0

-n 字符串长度非0

str一 = str二 字符串相同为真

str1 != str2 不平等为真

arg1 op arg2

-eq 相等
-ne 不等
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于

2、read

2、read

#!/bin/bash file=$1

totalLines=$(wc -l < $file) line=1 while test $line -le $totalLines
do lineData=$(sed -n “${line}p” $file) len=$(echo -n $lineData | wc -c)
echo “line ${line}: $len” line=$(( $line + 1 )) done
——————————————————— line=1 while
read lineData do len=$(echo $lineData | wc -c) echo “line ${line}: $len”
line=$(( $line + 1 )) done < $file
——————————————————— # vim test.sh
— 打字与印刷出十行hello world;<(seq 10)也正是二个文书路径;称之为进程置换
#!/bin/bash while read num do echo “hello world” done < <(seq 10)
——————————————————— n=1 while [
$n -le 10 ] do echo “hello world” n=$((n+1)) done
——————————————————— # vim test.sh
–创造一个片纸只字的大循环,要求循环运维一分钟后自动结束 #!/bin/bash
start_time=$(date +%s) while true do cur_time=$(date +%s) test
$((cur_time – start_time)) -ge 10 && break time=$((cur_time –
start_time)) echo “time is $time……” sleep 1 done # vim test.sh
–先用while 循环创立920个.txt文件;再将装有文件后缀名改为 .html
#!/bin/bash count=100
——————————————————— seq $count |
while read i do touch ${i}.txt done ls -1 *.txt | while read oldname do
newname=$(echo $oldname | sed ‘s/.txt$/.html/’) mv $oldname $newname
done ——————————————————— while
read i do touch ${i}.txt done < <( seq $count ) while read oldname
do newname=$(echo $oldname | sed ‘s/.txt$/.html/’) mv $oldname $newname
done < <(ls -1 *.txt ) # vim test.sh –计算出1000之内的偶数的和;无法选取管道,因为管道会生成子进度 #!/bin/bash sum=0
while read num do sum=$(( $sum + $num )) done < <(seq 2 2 998)
echo “sum: $sum ” # vim test.sh –批量添加98个邮件用户,用户名称为u一至u100,密码为abc,登录shell 为/sbin/nologin,只属于email组 #!/bin/bash
password=abc group=email grep -Eq “^${group}:” /etc/group || groupadd
$group while read i do useradd u${i} -N -g $group -s /sbin/nologin
passwd u${i} –stdin <<< “$password” done < <(seq 100) #
vim test.sh –批量删除刚刚成立的玖拾柒个邮件用户 #!/bin/bash while read i
do userdel -r u${i} done < <(seq 拾0   陆、for 循环
在一文山会海由分隔符隔绝的字符串中,按梯次每趟取中间之一,当取完事后,循环停止每趟取出的字符串会被保存在2个变量中,能够在循环体内选拔该变量
由分隔符隔开分离的字符串能够由此以下方法提供:
壹、手动输入字符串,用于循环钦赐次数 # vim test.sh #!/bin/bash for i in
一 二 三 do echo $i don 二、由变量提供字符串 # vim test.sh #!/bin/bash
FILES=”/bin/bash /bin/ls /bin/cat” for file in $FILES do echo $file done
三、程序生成的字符串 # vim test.sh #!/bin/bash for n in $(seq 1一) do
  echo $n done 四、由shell 展开而转变,循环目录中的文件 # vim test.sh
#!/bin/bash for f in /etc/init.d/* do echo $f done # vim test.sh
伍、打字与印刷出/dev 上边全体以 loop 开头的文书的文书名 # vim test.sh
#!/bin/bash for file in /dev/loop* do echo $(basename $file) done
6、总括出1000 之内的偶数的和 # vim test.sh #!/bin/bash sum=0 for
number in $(seq 二 二 998) do   sum=$(( $sum + $number )) done echo
“total: $sum” 柒、批量加上九几个邮件用户,用户名称为u一至u拾,密码为abc,登录shell 为/sbin/nologin,只属于email组 # vim
test.sh #!/bin/bash function checkGid() { gid=$1 if ! grep -qE “^$gid:”
/etc/group; then groupadd $gid fi } function isRoot() { id=$(id | awk -F
“[=(]” ‘{print $2}’) if test “$id” -ne 0; then echo “must be root”
>&二 exit 1 fi } count=十 namePrefix=u password=abc
shell=/sbin/nologin gid=email isRoot checkGid $gid for num in $(seq
$count) do name=${namePrefix}${num} useradd $name -s $shell -g $gid
&> /dev/null if test $? -ne 0; then echo “failed to create $name”
>&2 else echo “created successfully — $name” echo “$password” |
passwd –stdin $name &> /dev/null if test $? -ne 0; then echo “failed
to change password for $name” >&2 else echo “password changed
successfully — $name” fi fi done 捌、获取局域网内全数电脑的IP 和MAC
地址的照应表 # vim test.sh #!/bin/bash ipPrefix=19贰.168.一. startIp=1endIp=25四 for num in $(seq $startIp $endIp) do ip=${ipPrefix}$num ping
-W1 -c1 $ip &>/dev/null & done wait arp -n | sed ‘/incomplete/d’ |
awk ‘{print $一,$三}’| cat | sort -n -t ‘.’ -k四,4 | column -t
玖、打字与印刷出玖9乘法表 # vim test.sh #!/bin/bash for row in $(seq 9) do
for col in $(seq $row) do echo -n “${col}x${row}=$(( $col * $row )) ”
done echo done | column -t 10、简陋总结器 #!/bin/bash varnum=3 if test
“$#” -ne “$varnum”; then echo “wrong argument” >&2 exit 1 fi num1=$1
num2=$3 operator=$2 if test “$operator” = “x”;then operator=”*” fi if
test “$operator” = “/” -a “$num二” = 0; then echo “division by 0” >& 2exit 一 fi result=$(( $num壹 $operator $num2 )) echo “$result”
注意:乘法的拍卖;被除数为0时的处理
11、把钦点目录下的少数文件复制到钦定的目录,供给: #1.
从命令行参数接收八个参数,分别是源目录和对象目录 #2.
假诺源目录不设有,应该报错 #3. 假若指标目录不设有,就创办一个 #肆.
1旦指标已经存在但不是目录,就报错 #五. 只复制常规文件,软链接文件 #六.
对此正规文件,只复制大小小于1M 的文本 # vim /test.sh #!/bin/bash
function displayHelp() { echo “Usage: $(basename $0) SRCDIR DSTDIR” }
function getSize() { file=$1 size=$(ls -l $file | awk ‘{print $5}’) echo
$size } if test $# -ne 2; then displayHelp >&2 exit 1 fi srcdir=$1
dstdir=$2 if test ! -d “$srcdir”; then echo “$srcdir not exists or is
not a directory” >&2 exit 1 fi if test ! -e “$dstdir”; then mkdir
“$dstdir” fi if test ! -d “$dstdir”; then echo “$dstdir is not a
directory” >&2 exit 1 fi for file in $srcdir/* do if test -L $file;
then cp -a $file $dstdir/ elif test -f $file; then
————————————————— size=$(getSize
$file) if test “$size” -lt 1048576; then cp -a $file $dstdir/ fi
————————————————— find $file -type f
-size -1024k -exec cp -a {} $dstdir/ \;
————————————————— fi done

1、简介 贰、read
三、运算工具 4、if/then结构 五、while循环 陆、for循环 一、简介
一、什么是shell shell是用户与系统交互成效的…

逻辑操作


-a and
-o or

八个好的习惯

X${str壹} == X${str贰}
字符串比较假设2个为空,那么会错误进行,能够追加前缀防止
变量取值放在””之间,理由同上

三、运算工具

叁、运算工具

分支

if/then/elif/else/fi

#!/bin/bash
# ##################
echo “if..else if fi”
read num
if [[ $num -eq 100 ]]; then  
 #说话放在同壹行时应该以分行隔开分离
    #statements
    echo “num=100”
elif [[ $num -lt 100 ]]; then
    #statements
    echo “num<100”
else
   # echo “num>100”
  : #空体应当是用冒号,,冒号作为贰个命令,结果延续为真
fi

更加好做法

[  ] && {}
或者[  ] || {}

case命令

case/esac

case $_op in
    “+” )
    (( sum=$num1+$num2 ))
    printf “$num1 $_op $num2 = %s\n” “$sum”
    ;;
  “+”)
  :
  ;;
  *)
  ;;

【美高梅手机版4858】shell_script一。4、if/then结构

4、if/then结构

循环语句

do/done用于标识1个语句块的早先和了结,可以置身for行用分号隔断

#!/bin/bash
for i in {a..z}
do
    echo “printf val is : $i”
done

三个例证:壹+2+..+拾0=十50

#!/bin/bash
str=`seq 1 1 100 | tr ‘\n’ ‘+’ | sed ‘s/+$/\n/’`
printf ${str}=
echo `seq 1 1 100 | tr ‘\n’ ‘+’ | sed ‘s/+$/\n/’ | bc `

实践结果

1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100=5050

另1种实现格局
sum=0
str=””
for (( i = 0; i < 101; i++ )); do
    #statements
    (( sum = $i + $sum))
    str=$str${i}
    if [[ $i -eq 100 ]]; then
        #statements 
        break
    fi
    str=$str’+’
done
echo ${str}=$sum

while [ : ];do :;done

5、while循环

5、while循环

地点参数和特种变量

$0 地方参数0
$1 …
$2 …

$# 也就是参数个数argc-1
$@参数列表…  $1$2$三….
$* 同上
$?上一条命令的exitstatus
$$当前shell的历程号
岗位参数能够利用shift命令左移(覆盖后面包车型大巴n个参数)会转移$#  $@

6、for循环

6、for循环

函数

函数定义

FUNCNAME(){
}
function关键字可选
函数调用eg is_dir    #不要求参数,参数获取使用$@

#!/bin/bash
function is_dir(){
    local dir=$1
    if [[ -d $dir ]]; then
        #statements
        return 0
    else
        return 1
    fi
}

调试
-n 读3回脚本中命令但不执行,用于检查脚本中的语法错误
-v
-x 提供跟踪执行新闻,将履行的每一条命令和结果依次打印出来

三种艺术应用

#/bin/bash -x
$ sh -x ./test.sh
在剧本中应用set -x 和 set +x 对台本中某1段代码进行跟踪

 

 

数组

bash不支持多维数组,并且未有范围数组大小.(无越界之说)下标从0初步

定义:

array_name=(value1..valuen)
或者
array_name[0]=””
array_name[3]=””
array_name[6]=””

读取
${arrname[index]}
echo ${arr[*]}
获得字符串长度或许数老总度
i=${#arr[@]}

一、简介

一、简介

1、什么是shell

1、什么是shell

shell是用户与系统交互成效的界面。shell是壹种命令解释程序,同时也是1种尖端程序设计语言

shell是用户与系统交互成效的界面。shell是1种命令解释程序,同时也是一种尖端程序设计语言

2、shell常见体系

二、shell常见种类

Bourne Shell(/usr/bin/sh或/bin/sh)

Bourne Shell(/usr/bin/sh或/bin/sh)

Bourne Again Shell(/bin/bash)

Bourne Again Shell(/bin/bash)

C Shell(/usr/bin/csh)

C Shell(/usr/bin/csh)

K Shell(/usr/bin/ksh)

K Shell(/usr/bin/ksh)

Shell for Root(/sbin/sh)

Shell for Root(/sbin/sh)

里面:Bash在常常工作中被大规模运用;同时,Bash也是大部分Linux系统暗许的Shell;

其间:Bash在平日工作中被周围采纳;同时,Bash也是大部分Linux系统暗中认可的Shell;

3、shell局限性

3、shell局限性

一.1、供给消耗多量能源的天职,越发是对推行进度必要较高的场馆

一.1、必要成本大批量财富的职责,越发是对实践进程须求较高的场子

1.二、涉及大气的数学总计

一.二、涉及大气的数学总结

1.3.、关键性应用(数据库,网站等)

一.叁.、关键性应用(数据库,网址等)

1.四.、设计图纸只怕GUI的选拔

一.4.、设计图纸恐怕GUI的行使

一.伍.、要求直接待上访问硬件

1.伍.、需求一贯访问硬件

1.6.、开发闭源的行使(相对于开源)

一.六.、开发闭源的应用(相对于开源)

4、基础

4、基础

文件系统:Linux
的文件系统是二个包蕴了目录和文书的分支的团伙结构,位于最上方的名称叫根目录(root
directory),用斜杠/ 来表示

文件系统:Linux
的文件系统是3个带有了目录和文件的支行的团伙结构,位于最顶端的名称叫根目录(root
directory),用斜杠/ 来代表

目录:
是1种含有目录项的公文,各类目录项中都包蕴了文件名

目录:
是一种含有目录项的文件,各样目录项中都带有了文本名

文件名:
目录的剧情称为目录项,目录项蕴涵了文本名,唯有三种字符不允许出现在文书名中:斜杠,空字符(ASCII
值为0),斜杠用于分隔路径中的文件名,空字符用来代表路径的尾声。文件名的尺寸一般能够完结贰伍十一个字符

文本名:
目录的始末称为目录项,目录项包括了文件名,唯有三种字符不容许出现在文书名中:斜杠,空字符(ASCII
值为0),斜杠用于分隔路径中的文件名,空字符用来代表路径的末尾。文件名的尺寸壹般能够高达251个字符

途径:
壹多元文件名连起来,用斜杠分隔,就叫做路径,路径用于表示文件的地方;以斜杠开始的门径叫做相对路径,不然为绝对路径,相对路径相对于当前工作目录

途径:
一各类文件名连起来,用斜杠分隔,就称为路径,路径用于表示文件的任务;以斜杠开头的门路叫做相对路径,不然为相对路径,相对路径相对于当前工作目录

重回码:全体命令都有一个再次回到值,用0-255之间的平头来代表;脚本就是2个下令,它也有再次来到值,其它,脚本里面包车型大巴函数也有重回值

重回码:全部命令都有3个重返值,用0-255里边的平头来表示;脚本正是二个限令,它也有重返值,其余,脚本里面包车型大巴函数也有重回值

脱离脚本的正规方法是如雷贯耳地用命令exit [code]来退出,如:exit 0;exit $?

退出脚本的正规方法是惹人注目地用命令exit [code]来退出,如:exit 0;exit $?

 

 

二、read

二、read

1、定义

1、定义

read是2个buildin命令,重要形成对参数的赋值,类似C语言中的scanf;

read是二个buildin命令,首要成就对参数的赋值,类似C语言中的scanf;

其不但能够赋值变量,还足以赋值数组;

其不仅能够赋值变量,还是能赋值数组;

其输入不仅是显示器,仍能是文件讲述符

其输入不仅是显示器,还足以是文本讲述符

2、实操

2、实操

# read a –输入字符串,将字符串赋值给变量 a;# echo $a

# read a –输入字符串,将字符串赋值给变量 a;# echo $a

hello world!!

hello world!!

# read name sex age –同时分别给多个变量赋值,输入分隔符私下认可为 空格符

# read name sex age –同时分别给多个变量赋值,输入分隔符暗中同意为 空格符

zhangsan male 50

zhangsan male 50

# unset name sex age –删除变量

# unset name sex age –删除变量

# IFS=’;’ –将 read 的输入分隔符改为 ‘;’

# IFS=’;’ –将 read 的输入分隔符改为 ‘;’

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

prompt=”Please enter your name:”

prompt=”Please enter your name:”

read -p “$prompt” name

read -p “$prompt” name

echo “Greetings $name”

echo “Greetings $name”

 

 

三、运算工具

三、运算工具

一、不难数学生运动算

壹、简单数学运算

# echo $((1+2**2-3*4/5%陆)) –输出总括结果到显示器

# echo $((1+2**2-3*八成%六)) –输出总结结果到显示器

# a=$((1+2**2-3*4/5%陆)) –把总括结果赋给变量a

# a=$((1+2**2-3*4/五%陆)) –把计算结果赋给变量a

# ((a=1+2**2-3*4/5%6)) –同上

# ((a=1+2**2-3*4/5%6)) –同上

# echo “scale=叁;拾/叁” | bc –bc总计器;保留小数点后二人

# echo “scale=3;拾/3” | bc –bc总计器;保留小数点后四个人

# echo “2^10” | bc –bc计算器;计算2的10次方

# echo “2^10” | bc –bc计算器;计算2的10次方

# awk ‘BEGIN{print 1/3}’ –awk计算

# awk ‘BEGIN{print 1/3}’ –awk计算

②、获取随机数

二、获取随机数

# od -N4 -tu4 /dev/urandom | sed -n ‘1s/.* //p’ –获取3个7个人数的号码

# od -N4 -tu4 /dev/urandom | sed -n ‘1s/.* //p’ –获取2个6个人数的编号

# od -Ad -w贰四 -tu4 /dev/urandom –获取随机数

# od -Ad -w贰四 -tu四 /dev/urandom –获取随机数

# od -tu八 /dev/urandom –获取随机数

# od -tu8 /dev/urandom –获取随机数

# od -tu8 /dev/urandom | sed -r ‘s/^[0-9]+\s+//’ | sed -r
‘s/\s+/\n/g’ |cut -b1-8 |sed -r -n ‘/^.{八}$/p’ | sed ‘s/^/186/’ |head
-n陆仟 |vi – –获取一万个电话号码

# od -tu8 /dev/urandom | sed -r ‘s/^[0-9]+\s+//’ | sed -r
‘s/\s+/\n/g’ |cut -b一-八 |sed -r -n ‘/^.{八}$/p’ | sed ‘s/^/186/’ |head
-n5000 |vi – –获取一千0个电话号码

# od -N40000 -tu4 /dev/urandom | sed -r ‘s/^[0-9]+(\s+)?//’ | sed -r
‘s/\s+/\n/g’ | grep -vE ‘^\s*$’ > 10k_random –生成10000个随机数

# od -N40000 -tu4 /dev/urandom | sed -r ‘s/^[0-9]+(\s+)?//’ | sed -r
‘s/\s+/\n/g’ | grep -vE ‘^\s*$’ > 10k_random –生成三万个随机数

# sed -r -n ‘/^.{8}$/p’ 10k_random | head -n 100000 | sed ‘s/^/186/’
> phone_num

# sed -r -n ‘/^.{8}$/p’ 10k_random | head -n 100000 | sed ‘s/^/186/’
> phone_num

叁、获取数字类别

叁、获取数字系列

# seq 10 –获取1到10

# seq 10 –获取1到10

# seq 1 2 10 –获取1到10,步长为2

# seq 1 2 10 –获取1到10,步长为2

# seq 10 100 –获取10到100

# seq 10 100 –获取10到100

# seq 10 -1 1 –倒序,10到1

# seq 10 -1 1 –倒序,10到1

 

 

四、if/then实例

四、if/then实例

1、判断字符 “a” 是不是等于 “A”

1、判断字符 “a” 是不是等于 “A”

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

if [[ “a” = “A” ]]; then

if [[ “a” = “A” ]]; then

if [ “a” = “A” ]; then

if [ “a” = “A” ]; then

  echo “a equals A”

  echo “a equals A”

else

else

  echo “a no equals A”

  echo “a no equals A”

fi

fi

②、判断/root/test/test.sh是不是留存并保有可进行权限

贰、判断/root/test/test.sh是不是留存并负有可实施权限

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

if test -x
/root/test/test.sh;then

if test -x
/root/test/test.sh;then

  echo “/root/test/test.sh is executable”

  echo “/root/test/test.sh is executable”

fi

fi

三、判断系统是或不是存在 root 用户

三、判断系统是不是留存 root 用户

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

if grep -E –color=auto ^root:
/etc/passwd; then

if grep -E –color=auto ^root:
/etc/passwd; then

  echo “user root exists”

  echo “user root exists”

fi

fi

4、判断文件类型

肆、判断文件类型

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

function isSymbolicLink() {

function isSymbolicLink() {

  file=$1

  file=$1

  flag=$(ls -ld $file | cut -b1)

  flag=$(ls -ld $file | cut -b1)

  test “$flag” = “1”

  test “$flag” = “1”

  return $?

  return $?

}

}

file=$1

file=$1

if isSymbolicLink $file; then

if isSymbolicLink $file; then

  echo “Symbolic Link”

  echo “Symbolic Link”

elif test -d $file; then

elif test -d $file; then

  echo “Directory file”

  echo “Directory file”

elif test -f $file; then

elif test -f $file; then

  echo “Regular file”

  echo “Regular file”

elif test -b $file; then

elif test -b $file; then

  echo “Block special”

  echo “Block special”

elif test -c $file; then

elif test -c $file; then

  echo “Character special”

  echo “Character special”

elif test -p $file; then

elif test -p $file; then

  echo “Named pipe”

  echo “Named pipe”

elif test -S $file; then

elif test -S $file; then

  echo “Socket”

  echo “Socket”

else

else

  echo “Unkown”

  echo “Unkown”

fi

fi

伍、判断输入数字的深浅

伍、判断输入数字的轻重缓急

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

num=$1

num=$1

if test “$num” -lt 10 ;then

if test “$num” -lt 10 ;then

  echo “小数字”

  echo “小数字”

elif test “$num” -lt 20;then

elif test “$num” -lt 20;then

  echo “中数字”

  echo “中数字”

elif test “$num” -lt 30;then

elif test “$num” -lt 30;then

  echo “大数字”

  echo “大数字”

else

else

  echo “超大数字”

  echo “超大数字”

fi

fi

陆、从规范输入获取贰个数字,并依照其尺寸输出钦赐字符串

陆、从规范输入获取二个数字,并依照其大小输出钦赐字符串

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

echo -n “Enter a number: “

echo -n “Enter a number: “

read num

read num

if [ “$num” -lt 100 ]; then

if [ “$num” -lt 100 ]; then

echo “小于100”

echo “小于100”

elif [ “$num” -ge 100 -a “$num” -lt 200 ]; then

elif [ “$num” -ge 100 -a “$num” -lt 200 ]; then

echo “大于等于100稍低于200”

echo “大于等于100低于200”

elif [ “$num” -ge 200 -a “$num” -lt 300 ]; then

elif [ “$num” -ge 200 -a “$num” -lt 300 ]; then

echo “大于等于200紧跟于300”

echo “大于等于200紧跟于300”

else

else

echo “其余数字”

echo “其余数字”

fi

fi

 

 

五、wihle循环

五、wihle循环

1、认识

1、认识

测试 while
关键字背后一条命令的重返码,条件为真时,程序读入while循环体中的指令;0为真。循环体如下:

测试 while
关键字背后一条命令的重回码,条件为真时,程序读入while循环体中的指令;0为真。循环体如下:

while [] –while 前边运维 [ ]
命令,测试 [ ] 命令的再次来到码

while [] –while 后边运营 [ ]
命令,测试 [ ] 命令的重回码

cat /filename | while read
line       –while 后边运营read 命令,测试 read
命令的重返码

cat /filename | while read
line       –while 后边运营read 命令,测试 read
命令的再次来到码

do

do

……

……

done

done

二、循环控制语句

二、循环控制语句

continue –终止当前轮回,起首下三个巡回

continue –终止当前轮回,初步下一个巡回

break –终止当前轮回,并脱离循环体

break –终止当前轮回,并脱离循环体

exit –终止当前剧本

exit –终止当前剧本

3、实例

3、实例

# vim test.sh –区分 continue 与 break
的区别

# vim test.sh –区分 continue 与 break
的区别

#!/bin/bash

#!/bin/bash

while true

while true

do

do

sleep 1

sleep 1

echo test

echo test

continue/break

continue/break

echo

echo

done

done

# vim test.sh –区分 break 与 exit
的区别

# vim test.sh –区分 break 与 exit
的区别

#!/bin/bash

#!/bin/bash

while test -e /data/test/test.sh

while test -e /data/test/test.sh

do

do

echo “exists”

echo “exists”

sleep 1

sleep 1

break/exit

break/exit

done

done

echo “loop end”

echo “loop end”

# vim test.sh –寻找大家加以的门路,直到寻到停止

# vim test.sh –寻找大家加以的不二法门,直到寻到甘休

#!/bin/bash

#!/bin/bash

if test $# -ne 1;then

if test $# -ne 1;then

echo “wrong paraneter” >&2

echo “wrong paraneter” >&2

exit

exit

fi

fi

path=$1

path=$1

while test ! -e “$path”

while test ! -e “$path”

美高梅手机版4858 ,do

do

sleep 1

sleep 1

echo “don’t found!!!”

echo “don’t found!!!”

done

done

echo “found”

echo “found”

# vim test.sh –脚本运维内定的光阴,时间一到就退出;单位为
s

# vim test.sh –脚本运转钦点的岁月,时间1到就退出;单位为
s

#!/bin/bash

#!/bin/bash

if test $# -ne 1;then

if test $# -ne 1;then

echo “Usage: $(basename $0) TIME” >&2

echo “Usage: $(basename $0) TIME” >&2

exit 1

exit 1

fi

fi

timeLength=$1

timeLength=$1

beginTime=$(date +%s)

beginTime=$(date +%s)

endTime=$(( $beginTime + $timeLength ))

endTime=$(( $beginTime + $timeLength ))



while test $(date +%s) -lt “$endTime”

while test $(date +%s) -lt “$endTime”

do

do

echo “processing…..”

echo “processing…..”

sleep 1

sleep 1

done

done



while true

while true

do

do

if test $(date +%s) -ge “$endTime”;then

if test $(date +%s) -ge “$endTime”;then

break

break

fi

fi

echo “processing……”

echo “processing……”

sleep 1

sleep 1

done

done



echo “time out”

echo “time out”

# vim test.sh –循环读取文件的每一行,并总结每行的字符个数

# vim test.sh –循环读取文件的每一行,并计算每行的字符个数

#!/bin/bash

#!/bin/bash

file=$1

file=$1



totalLines=$(wc -l < $file)

totalLines=$(wc -l < $file)

line=1

line=1

while test $line -le $totalLines

while test $line -le $totalLines

do

do

lineData=$(sed -n “${line}p” $file)

lineData=$(sed -n “${line}p” $file)

len=$(echo -n $lineData | wc -c)

len=$(echo -n $lineData | wc -c)

echo “line ${line}: $len”

echo “line ${line}: $len”

line=$(( $line + 1 ))

line=$(( $line + 1 ))

done

done



line=1

line=1

while read lineData

while read lineData

do

do

len=$(echo $lineData | wc -c)

len=$(echo $lineData | wc -c)

echo “line ${line}: $len”

echo “line ${line}: $len”

line=$(( $line + 1 ))

line=$(( $line + 1 ))

done < $file

done < $file



# vim test.sh — 打字与印刷出十行hello
world;<(seq 十)约等于七个文书路径;称之为进度置换

# vim test.sh — 打字与印刷出10行hello
world;<(seq 10)相当于几个文件路径;称之为进度置换

#!/bin/bash

#!/bin/bash

while read num

while read num

do

do

echo “hello world”

echo “hello world”

done < <(seq 10)

done < <(seq 10)



n=1

n=1

while [ $n -le 10 ]

while [ $n -le 10 ]

do

do

echo “hello world”

echo “hello world”

n=$((n+1))

n=$((n+1))

done

done



# vim test.sh
–创立三个欠缺的大循环,须求循环运营一分钟后自行终止

# vim test.sh
–创制叁个残缺的巡回,供给循环运维一分钟后活动结束

#!/bin/bash

#!/bin/bash

start_time=$(date +%s)

start_time=$(date +%s)

while true

while true

do

do

cur_time=$(date +%s)

cur_time=$(date +%s)

test $((cur_time – start_time)) -ge 10 && break

test $((cur_time – start_time)) -ge 10 && break

time=$((cur_time – start_time))

time=$((cur_time – start_time))

echo “time is $time……”

echo “time is $time……”

sleep 1

sleep 1

done

done

# vim test.sh –先用while
循环创造98个.txt文件;再将装有文件后缀名改为 .html

# vim test.sh –先用while
循环成立⑨16个.txt文件;再将享有文件后缀名改为 .html

#!/bin/bash

#!/bin/bash

count=100

count=100



seq $count | while read i

seq $count | while read i

do

do

touch ${i}.txt

touch ${i}.txt

done

done

ls -1 *.txt | while read oldname

ls -1 *.txt | while read oldname

do

do

newname=$(echo $oldname | sed ‘s/.txt$/.html/’)

newname=$(echo $oldname | sed ‘s/.txt$/.html/’)

mv $oldname $newname

mv $oldname $newname

done

done



while read i

while read i

do

do

touch ${i}.txt

touch ${i}.txt

done < <( seq $count )

done < <( seq $count )

while read oldname

while read oldname

do

do

newname=$(echo $oldname | sed ‘s/.txt$/.html/’)

newname=$(echo $oldname | sed ‘s/.txt$/.html/’)

mv $oldname $newname

mv $oldname $newname

done < <(ls -1 *.txt )

done < <(ls -1 *.txt )

# vim test.sh –总计出一千之内的偶数的和;不能应用管道,因为管道会生成子进程

# vim test.sh –计算出1000之内的偶数的和;不可能使用管道,因为管道会生成子进度

#!/bin/bash

#!/bin/bash

sum=0

sum=0

while read num

while read num

do

do

sum=$(( $sum + $num ))

sum=$(( $sum + $num ))

done < <(seq 2 2 998)

done < <(seq 2 2 998)

echo “sum: $sum “

echo “sum: $sum “

# vim test.sh –批量添加91八个邮件用户,用户名字为u1至u100,密码为abc,登录shell 为/sbin/nologin,只属于email组

# vim test.sh –批量添加九十多少个邮件用户,用户名字为u一至u十0,密码为abc,登录shell 为/sbin/nologin,只属于email组

#!/bin/bash

#!/bin/bash

password=abc

password=abc

group=email

group=email

grep -Eq “^${group}:” /etc/group || groupadd $group

grep -Eq “^${group}:” /etc/group || groupadd $group

while read i

while read i

do

do

useradd u${i} -N -g $group -s /sbin/nologin

useradd u${i} -N -g $group -s /sbin/nologin

passwd u${i} –stdin <<< “$password”

passwd u${i} –stdin <<< “$password”

done < <(seq 100)

done < <(seq 100)

# vim test.sh
–批量删除刚刚成立的九十几个邮件用户

# vim test.sh
–批量删除刚刚成立的九17个邮件用户

#!/bin/bash

#!/bin/bash

while read i

while read i

do

do

userdel -r u${i}

userdel -r u${i}

done < <(seq 100

done < <(seq 100

 

 

六、for 循环

六、for 循环

在一名目繁多由分隔符隔绝的字符串中,按梯次每一趟取中间之1,当取完之后,循环停止

在1各种由分隔符隔开分离的字符串中,按梯次每一回取在那之中之壹,当取完事后,循环截至

每一次取出的字符串会被封存在一个变量中,可以在循环体内接纳该变量

老是取出的字符串会被保留在一个变量中,能够在循环体内使用该变量

由分隔符隔断的字符串能够通过以下方法提供:

由分隔符隔离的字符串能够由此以下方法提供:

一、手动输入字符串,用于循环钦赐次数

一、手动输入字符串,用于循环钦赐次数

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

for i in 1 2 3

for i in 1 2 3

do

do

echo $i

echo $i

don

don

二、由变量提供字符串

2、由变量提供字符串

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

FILES=”/bin/bash /bin/ls /bin/cat”

FILES=”/bin/bash /bin/ls /bin/cat”

for file in $FILES

for file in $FILES

do

do

echo $file

echo $file

done

done

三、程序生成的字符串

三、程序生成的字符串

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

for n in $(seq 11)

for n in $(seq 11)

do

do

  echo $n

  echo $n

done

done

4、由shell
展开而转变,循环目录中的文件

4、由shell
展开而转变,循环目录中的文件

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

for f in /etc/init.d/*

for f in /etc/init.d/*

do

do

echo $f

echo $f

done

done

# vim test.sh

# vim test.sh

伍、打字与印刷出/dev 上面全体以 loop
初始的文书的文本名

5、打印出/dev 下边全体以 loop
伊始的公文的公文名

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

for file in /dev/loop*

for file in /dev/loop*

do

do

echo $(basename $file)

echo $(basename $file)

done

done

6、总括出一千 之内的偶数的和

陆、计算出一千 之内的偶数的和

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

sum=0

sum=0

for number in $(seq 2 2 998)

for number in $(seq 2 2 998)

do

do

  sum=$(( $sum + $number ))

  sum=$(( $sum + $number ))

done

done

echo “total: $sum”

echo “total: $sum”

柒、批量添加玖拾几个邮件用户,用户名称叫u一至u十,密码为abc,登录shell 为/sbin/nologin,只属于email组

7、批量丰盛九十一个邮件用户,用户名称为u1至u10,密码为abc,登录shell 为/sbin/nologin,只属于email组

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

function checkGid() {

function checkGid() {

gid=$1

gid=$1

if ! grep -qE “^$gid:” /etc/group; then

if ! grep -qE “^$gid:” /etc/group; then

groupadd $gid

groupadd $gid

fi

fi

}

}

function isRoot() {

function isRoot() {

id=$(id | awk -F “[=(]” ‘{print $2}’)

id=$(id | awk -F “[=(]” ‘{print $2}’)

if test “$id” -ne 0; then

if test “$id” -ne 0; then

echo “must be root” >&2

echo “must be root” >&2

exit 1

exit 1

fi

fi

}

}

count=10

count=10

namePrefix=u

namePrefix=u

password=abc

password=abc

shell=/sbin/nologin

shell=/sbin/nologin

gid=email

gid=email

isRoot

isRoot

checkGid $gid

checkGid $gid

for num in $(seq $count)

for num in $(seq $count)

do

do

name=${namePrefix}${num}

name=${namePrefix}${num}

useradd $name -s $shell -g $gid &> /dev/null

useradd $name -s $shell -g $gid &> /dev/null

if test $? -ne 0; then

if test $? -ne 0; then

echo “failed to create $name” >&2

echo “failed to create $name” >&2

else

else

echo “created successfully — $name”

echo “created successfully — $name”

echo “$password” | passwd –stdin $name &> /dev/null

echo “$password” | passwd –stdin $name &> /dev/null

if test $? -ne 0; then

if test $? -ne 0; then

echo “failed to change password for $name” >&2

echo “failed to change password for $name” >&2

else

else

echo “password changed successfully — $name”

echo “password changed successfully — $name”

fi

fi

fi

fi

done

done

八、获取局域网内全体电脑的IP 和MAC
地址的对应表

捌、获取局域网内全数电脑的IP 和MAC
地址的对应表

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

ipPrefix=192.168.1.

ipPrefix=192.168.1.

startIp=1

startIp=1

endIp=254

endIp=254

for num in $(seq $startIp $endIp)

for num in $(seq $startIp $endIp)

do

do

ip=${ipPrefix}$num

ip=${ipPrefix}$num

ping -W1 -c1 $ip &>/dev/null &

ping -W1 -c1 $ip &>/dev/null &

done

done

wait

wait

arp -n | sed ‘/incomplete/d’ | awk ‘{print $1,$3}’| cat | sort -n -t ‘.’
-k4,4 | column -t

arp -n | sed ‘/incomplete/d’ | awk ‘{print $1,$3}’| cat | sort -n -t ‘.’
-k4,4 | column -t

玖、打字与印刷出九玖乘法表

玖、打字与印刷出九九乘法表

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

for row in $(seq 9)

for row in $(seq 9)

do

do

for col in $(seq $row)

for col in $(seq $row)

do

do

echo -n “${col}x${row}=$(( $col * $row )) “

echo -n “${col}x${row}=$(( $col * $row )) “

done

done

echo

echo

done | column -t

done | column -t

10、简陋总括器

10、简陋总括器

#!/bin/bash

#!/bin/bash

varnum=3

varnum=3

if test “$#” -ne “$varnum”; then

if test “$#” -ne “$varnum”; then

echo “wrong argument” >&2

echo “wrong argument” >&2

exit 1

exit 1

fi

fi

num1=$1

num1=$1

num2=$3

num2=$3

operator=$2

operator=$2

if test “$operator” = “x”;then

if test “$operator” = “x”;then

operator=”*”

operator=”*”

fi

fi

if test “$operator” = “/” -a “$num2” = 0; then

if test “$operator” = “/” -a “$num2” = 0; then

echo “division by 0” >& 2

echo “division by 0” >& 2

exit 1

exit 1

fi

fi

result=$(( $num1 $operator $num2 ))

result=$(( $num1 $operator $num2 ))

echo “$result”

echo “$result”

只顾:乘法的拍卖;被除数为0时的拍卖

在意:乘法的处理;被除数为0时的处理

1一、把钦点目录下的一些文件复制到钦点的目录,须求:

1一、把钦定目录下的1些文件复制到钦赐的目录,供给:

#一. 从命令行参数接收五个参数,分别是源目录和指标目录

#一. 从命令行参数接收五个参数,分别是源目录和目的目录

#二. 一旦源目录不存在,应该报错

#二. 比方源目录不设有,应该报错

#叁. 只要指标目录不设有,就创办一个

#三. 假使指标目录不存在,就创设1个

#4. 一旦目的已经存在但不是目录,就报错

#四. 借使指标已经存在但不是目录,就报错

#五. 只复制常规文件,软链接文件

#伍. 只复制常规文件,软链接文件

#陆. 对于健康文件,只复制大小小于1M 的文本

#六. 对此正规文件,只复制大小小于1M 的文本

# vim /test.sh

# vim /test.sh

#!/bin/bash

#!/bin/bash

function displayHelp()

function displayHelp()

{

{

echo “Usage: $(basename $0) SRCDIR DSTDIR”

echo “Usage: $(basename $0) SRCDIR DSTDIR”

}

}

function getSize()

function getSize()

{

{

file=$1

file=$1

size=$(ls -l $file | awk ‘{print $5}’)

size=$(ls -l $file | awk ‘{print $5}’)

echo $size

echo $size

}

}

if test $# -ne 2; then

if test $# -ne 2; then

displayHelp >&2

displayHelp >&2

exit 1

exit 1

fi

fi

srcdir=$1

srcdir=$1

dstdir=$2

dstdir=$2

if test ! -d “$srcdir”; then

if test ! -d “$srcdir”; then

echo “$srcdir not exists or is not a directory” >&2

echo “$srcdir not exists or is not a directory” >&2

exit 1

exit 1

fi

fi

if test ! -e “$dstdir”; then

if test ! -e “$dstdir”; then

mkdir “$dstdir”

mkdir “$dstdir”

fi

fi

if test ! -d “$dstdir”; then

if test ! -d “$dstdir”; then

echo “$dstdir is not a directory” >&2

echo “$dstdir is not a directory” >&2

exit 1

exit 1

fi

fi

for file in $srcdir/*

for file in $srcdir/*

do

do

if test -L $file; then

if test -L $file; then

cp -a $file $dstdir/

cp -a $file $dstdir/

elif test -f $file; then

elif test -f $file; then



size=$(getSize $file)

size=$(getSize $file)

if test “$size” -lt 1048576; then

if test “$size” -lt 1048576; then

cp -a $file $dstdir/

cp -a $file $dstdir/

fi

fi



find $file -type f -size -1024k -exec cp -a {} $dstdir/ \;

find $file -type f -size -1024k -exec cp -a {} $dstdir/ \;



fi

fi

done

done

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有