1、简介

1、简介

shell_script1,shellscript

壹、简介 2、read 叁、运算工具 4、if/then结构 五、while循环 6、for循环  
1、简介 一、什么是shell
shell是用户与系统交互作用的界面。shell是1种命令解释程序,同时也是1种尖端程序设计语言
贰、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.三.、关键性应用(数据库,网址等)
一.4.、设计图纸也许GUI的应用 一.伍.、须要直接待上访问硬件
一.陆.、开发闭源的选择(相对于开源) 4、基础 文件系统:Linux
的文件系统是叁个包括了目录和文件的支行的团协会结构,位于最上端的名称为根目录(root
directory),用斜杠/ 来表示 目录:
是1种含有目录项的公文,每一种目录项中都包蕴了文件名 文件名:
目录的始末称为目录项,目录项包涵了文本名,只有三种字符不允许出未来文件名中:斜杠,空字符(ASCII
值为0),斜杠用于分隔路径中的文件名,空字符用来表示路径的最终。文件名的长度一般能够完结二五2十二个字符
路径:
一名目繁多文件名连起来,用斜杠分隔,就称为路径,路径用于表示文件的职位;以斜杠起始的途径叫做绝对路径,不然为相对路径,相对路径相对于当前工作目录
再次来到码:全部命令都有多个再次来到值,用0-255之间的平头来代表;脚本便是2个指令,它也有重临值,其它,脚本里面包车型地铁函数也有再次回到值
退出脚本的正规方法是强烈地用命令exit [code]来退出,如:exit 0;exit $?
  2、read 一、定义
read是多少个buildin命令,首要成就对参数的赋值,类似C语言中的scanf;
其不但能够赋值变量,还足以赋值数组;
其输入不仅是显示屏,还能是文件讲述符 2、实际操作 # 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”   3、运算工具
一、简单数学生运动算 # echo $((1+2**2-3*4/伍%陆)) –输出总计结果到显示器 #
a=$((1+2**2-3*4/5%陆)) –把计算结果赋给变量a #
((a=1+2**2-3*4/5%6)) –同上 # echo “scale=三;10/3” | bc
–bc总结器;保留小数点后二个人 # echo “2^10” | bc
–bc计算器;计算2的10次方 # awk ‘BEGIN{print 1/三}’ –awk总括2、获取随机数 # od -N4 -tu4 /dev/urandom | sed -n ‘1s/.* //p’
–获取贰个五个人数的号子 # od -Ad -w2四 -tu四 /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 – –获取贰万个电话号码 #
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 3、获取数字系列 # seq 10 –获取1到10 # seq 1 2 10
–获取1到10,步长为2 # seq 10 100 –获取10到100 # seq 十 -1 一–倒序,10到一   4、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=$1   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 10 ;then   echo “小数字” elif
test “$num” -lt 20;then   echo “中数字” elif test “$num” -lt 30;then
  echo “大数字” else   echo “超大数字” fi
6、从行业内部输入获取3个数字,并基于其尺寸输出钦定字符串 # 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  
5、wihle循环 一、认识 测试 while
关键字背后一条命令的再次回到码,条件为真时,程序读入while循环体中的指令;0为真。循环体如下:
while [] –while 前边运营 [ ] 命令,测试 [ ] 命令的回来码 cat
/filename | while read line       –while 前面运营read 命令,测试
read 命令的再次来到码 do …… done 2、循环控制语句 continue
–终止当前循环,开端下三个循环 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为真,一为假

test

[ ] 

[[ ]]

参数之间利用空格隔绝

测试命令

-d 存在且为目录

-f 存在且为普通文书

-z 字符串长度为0

-n 字符串长度非0

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

str1 != str二 不平等为真

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 拾)也便是3个文书路径;称之为进度置换
#!/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
–创设3个欠缺的循环,要求循环运转1分钟后自行终止 #!/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 循环成立玖八个.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 –计算出一千之内的偶数的和;不可能选用管道,因为管道会生成子进度 #!/bin/bash sum=0
while read num do sum=$(( $sum + $num )) done < <(seq 2 2 998)
echo “sum: $sum ” # vim test.sh –批量添加玖拾玖个邮件用户,用户名称为u一至u十0,密码为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 –批量删除刚刚创造的9几个邮件用户 #!/bin/bash while read i
do userdel -r u${i} done < <(seq 十0   六、for 循环
在1多级由分隔符隔离的字符串中,按梯次每趟取中间之一,当取完以往,循环结束每一次取出的字符串会被保留在1个变量中,能够在循环体Nelly用该变量
由分隔符隔开分离的字符串能够透过以下格局提供:
壹、手动输入字符串,用于循环钦点次数 # 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
3、程序生成的字符串 # 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、计算出一千 之内的偶数的和 # vim test.sh #!/bin/bash sum=0 for
number in $(seq 二 贰 9玖捌) do   sum=$(( $sum + $number )) done echo
“total: $sum” 柒、批量抬高916个邮件用户,用户名字为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 一 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”
>&二 else echo “created successfully — $name” echo “$password” |
passwd –stdin $name &> /dev/null if test $? -ne 0; then echo “failed
to change password for $name” >&贰 else echo “password changed
successfully — $name” fi fi done 捌、获取局域网内全部电脑的IP 和MAC
地址的照应表 # vim test.sh #!/bin/bash ipPrefix=19二.16八.一. startIp=一endIp=25四 for num in $(seq $startIp $endIp) do ip=${ipPrefix}$num ping
-W一 -c一 $ip &>/dev/null & done wait arp -n | sed ‘/incomplete/d’ |
awk ‘{print $壹,$三}’| cat | sort -n -t ‘.’ -k肆,四 | 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” >& 二exit 壹 fi result=$(( $num壹 $operator $num二 )) echo “$result”
注意:乘法的拍卖;被除数为0时的拍卖
1一、把钦赐目录下的一点文件复制到钦命的目录,须求: #一.
从命令行参数接收四个参数,分别是源目录和对象目录 #二.
比方源目录不存在,应该报错 #3. 一旦目的目录不存在,就成立贰个 #四.
固然指标已经存在但不是目录,就报错 #伍. 只复制常规文件,软链接文件 #6.
对于健康文件,只复制大小小于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

一、简介 二、read
三、运算工具 四、if/then结构 5、while循环 6、for循环 1、简介
一、什么是shell shell是用户与系统交互功用的…

逻辑操作


-a and
-o or

多少个好的习惯

X${str一} == X${str2}
字符串比较固然三个为空,那么会错误进行,能够追加前缀幸免
变量取值放在””之间,理由同上

三、运算工具

三、运算工具

分支

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”
    ;;
  “+”)
  :
  ;;
  *)
  ;;

4、if/then结构

4、if/then结构

循环语句

do/done用于标识八个语句块的开首和结束,能够置身for行用分号隔断

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

3个事例:一+2+..+拾0=1050

#!/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-一
$@参数列表…  $壹$二$三….
$* 同上
$?上一条命令的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
}

调试
shell_script壹。-n 读贰遍脚本中命令但不履行,用于检查脚本中的语法错误
-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是一种命令解释程序,同时也是一种尖端程序设计语言

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也是超越12分之伍Linux系统暗中同意的Shell;

其间:Bash在常常工作中被相近运用;同时,Bash也是大部分Linux系统默许的Shell;

3、shell局限性

3、shell局限性

1.一、须要消耗大量能源的天职,尤其是对进行进程要求较高的场所

一.一、须求消耗多量能源的任务,尤其是对施行进度供给较高的场面

一.贰、涉及大气的数学计算

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

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

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

1.四.、设计图片大概GUI的使用

一.四.、设计图片大概GUI的选择

壹.五.、必要一向访问硬件

一.伍.、须要平素访问硬件

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

一.陆.、开发闭源的施用(相对于开源)

4、基础

4、基础

文件系统:Linux
的文件系统是二个带有了目录和文件的分层的团伙结构,位于最上端的名为根目录(root
directory),用斜杠/ 来表示

文件系统:Linux
的文件系统是三个暗含了目录和文件的分支的团队结构,位于最上方的称之为根目录(root
directory),用斜杠/ 来表示

目录:
是一种含有目录项的公文,每一种目录项中都包涵了文件名

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

文件名:
目录的剧情称为目录项,目录项包涵了文件名,唯有二种字符不一样意出现在文书名中:斜杠,空字符(ASCII
值为0),斜杠用于分隔路径中的文件名,空字符用来表示路径的末梢。文件名的长短一般能够达到二伍十个字符

文本名:
目录的始末称为目录项,目录项包涵了文件名,只有三种字符不允许现身在文书名中:斜杠,空字符(ASCII
值为0),斜杠用于分隔路径中的文件名,空字符用来代表路径的尾声。文件名的长度一般能够达到2五十一个字符

途径:
一文山会海文件名连起来,用斜杠分隔,就称为路径,路径用于表示文件的岗位;以斜杠早先的门路叫做相对路径,不然为相对路径,相对路径相对于当前工作目录

路线:
一雨后冬笋文件名连起来,用斜杠分隔,就叫做路径,路径用于表示文件的地点;以斜杠开首的门径叫做相对路径,不然为相对路径,相对路径相对于当前工作目录

重返码:全数命令都有一个再次回到值,用0-255之内的平头来代表;脚本正是1个下令,它也有再次回到值,其余,脚本里面包车型地铁函数也有重回值

重临码:全体命令都有一个再次来到值,用0-255里面包车型客车平头来代表;脚本正是三个命令,它也有再次来到值,别的,脚本里面包车型地铁函数也有再次来到值

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

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

 

 

二、read

二、read

1、定义

1、定义

read是3个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/五%陆)) –输出计算结果到荧屏

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

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

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

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

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

# echo “scale=三;十/三” | bc –bc总结器;保留小数点后4位

# echo “scale=三;十/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’ –获取七个七位数的号子

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

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

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

# od -tu捌 /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 ‘/^.{八}$/p’ | sed ‘s/^/186/’ |head
-n四千 |vi – –获取两千0个电话号码

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

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

# 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实例

一、判断字符 “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 用户

3、判断系统是不是留存 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

四、判断文件类型

四、判断文件类型

# 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

5、判断输入数字的分寸

伍、判断输入数字的深浅

# 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

陆、从专业输入获取2个数字,并依照其大小输出钦赐字符串

陆、从正式输入获取贰个数字,并基于其尺寸输出钦命字符串

# 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 “大于等于十0稍低于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 –终止当前巡回,开头下3个循环

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”

do

do

sleep 1

sleep 1

echo “don’t found!!!”

echo “don’t found!!!”

done

done

echo “found”

echo “found”

# vim test.sh –脚本运维钦命的时日,时间1到就淡出;单位为
s

# vim test.sh –脚本运转钦定的时光,时间壹到就退出;单位为
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 10)约等于3个文本路径;称之为进度置换

# vim test.sh — 打字与印刷出拾行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
–成立1个欠缺的巡回,须要循环运行一分钟后自行甘休

#!/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
循环成立玖十八个.txt文件;再将装有文件后缀名改为 .html

# vim test.sh –先用while
循环成立917个.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 –计算出1000之内的偶数的和;不能应用管道,因为管道会生成子进程

# 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 –批量添加一百个邮件用户,用户名称叫u一至u100,密码为abc,登录shell 为/sbin/nologin,只属于email组

# vim test.sh –批量添加九十七个邮件用户,用户名字为u1至u100,密码为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
–批量删除刚刚创制的一百个邮件用户

#!/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密密麻麻由分隔符隔绝的字符串中,按梯次每一回取中间之1,当取完之后,循环停止

历次取出的字符串会被封存在四个变量中,能够在循环体内接纳该变量

老是取出的字符串会被保留在3个变量中,可以在循环体内选拔该变量

由分隔符隔开分离的字符串能够经过以下办法提供:

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

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

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

四、由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

5、打字与印刷出/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”

7、批量抬高916个邮件用户,用户名称为u1至u十,密码为abc,登录shell 为/sbin/nologin,只属于email组

七、批量加上9拾陆个邮件用户,用户名称为u一至u拾,密码为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

8、获取局域网内全数电脑的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

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

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

# 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、简陋计算器

#!/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一、把钦赐目录下的少数文件复制到钦点的目录,要求:

11、把钦赐目录下的有个别文件复制到钦点的目录,须要:

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

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

#二. 若是源目录不存在,应该报错

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

#三. 如若目标目录不设有,就创制八个

#3. 就算指标目录不设有,就创办二个

#4. 1旦指标已经存在但不是目录,就报错

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

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

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

#陆. 对俞露规文件,只复制大小小于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

相关文章