【shell脚本学习-4】
文本处理
#!/bin/bash
#----------文本处理----------
#---------------echo-----------------
# "-n":处理光标在末尾
echo -n "Please Input Your Name"
read Name
echo -n "Please Input Your Sex"
read Sex
# "-e:转义"
echo -e "Name \t Sex \t" #\t:制表;\a:响铃
echo -e "Alice \t Women \t"
echo -e "Shell Script\a"
for((i=1;i<10;i++))
do
for((j=1;j<=$i;j++))
do
echo -n -e "$i*$j\t" #制表符
done
done
#-------------flod-----------
str=`fold -s -w 5 1.txt`
#文本处理fold{-s:折行;-w:折断的列数}
echo $str
#----------------fmt---------------
str=`fmt -c -w 3 1.txt`
#文本格式化fmt{-c:首行缩进;-w:保持字符完整性的折行}
echo $str
#-------------------rev--------
str=`rev 1.txt`
#反转文本
echo $str
#-------------pr------------------
str=`pr -h "Server Script Language" -a -s 1.txt`
#文本显示格式化pr{-h:标题}
echo $str
#-------------------sort-----------------
#sort文本排序
str=`sort -k 2,3 1.txt ` #-k{start,end}
echo -e "$str\n"
if [ $1 -gt 6 ] #接受用户输入的第一个形参进行条件测试
then
echo "Sorry,You Input Line Gather Than 6"
fi
result=`sort -r -k $1 1.txt` #逆序第一个形参
echo $result
str=`sort -n -k 80.1,85.1 1.txt` #列的字符
echo $str
str=`sort -t : ¥ -k3n,3 /etc/passwd`
echo $str
str=`sort -u /etc/sysconfig/network-scripts/ifcfg-ens33`
#排除重复列
echo -e $str \n > /etc/sysconfig/network-scripts/ifcfg-ens33
str=`sort -u -m 1.txt 2.txt > total.txt` #合并文本
echo $str
#文本行号
str=`nl -b a 1.txt > 1.txts`
echo $str
#--------------grep--------------------
echo -n "Please Input Your Name"
read Name
while [ $Name != "e" ]; do #当输入不为"e"继续统计输入的行数
Quiaty=`grep -c "$Name" 1.txt`
echo "$Name Line is $Quiaty"
echo -n "Please Agine Input Your Name "
read Name #再次读取用户输入
#statements
done
#--------------------cut------------------
#字符截取
str=`cut -d ":" -f 1,3 /etc/passwd` #分割,匹配列
echo -e "$str\n"
str=`cut c1-3 /etc/passwd` #1-3行
echo -e "$str\n"
cut -s -d ":" -f 2 /etc/passwd > 1.txt #筛选不重复
#more 1.txt
#---------------paste---------------
result=`paste -d "¥" 1.txt 2.txt > 3.txt` #拼接,"-d":分割符
echo -e "$result\n\t"
#-----------------------------join-----------
#!/bin/bash
:<<EOF
echo "a 12 a" > 1.txt
echo "b 53 B" > 2.txt
paste -d: "¥" 1.txt 2.txt > 3.txt #拼接1,2文本
cut -f1,3 3.txt > 3.txts #截取3文本1-3列
EOF
result=`join -1 1 -2 2 1.txt 2.txt > 3.txt` #不同文件的指定列拼接
echo -e "$result\n"
result=`join -a 1 -a 2 -o 1.1 2.1 1.txt 2.txt > 3.txt`
#左 -a 1|右 -a 2|全 -a 1 -a 2连接
#-o 文件自定义列
echo -e "$result\n"
#-------------------------------tr--------
result=`cat 1.txt | tr -s ["\n"]` #tr -s "[a-z]" < 1.txt`#筛选|空格不重复的字符
echo -e "$result\n"
for file in `ls /home`
do
echo $file | tr '[a-z]' '[A-Z]' #大小写转换
done
result=`tr -d '[0-9][:]' < 1.txt` #指定字符删除
echo $result
result=`tr -cs "[a-z][A-Z]" "[\n*]" < 1.txt` #补集添加字符删除重复机特殊字符
echo $result
#!/bin/bash
#!/bin/sed
#------------------------流编辑---------------
#替换文本
:<<FTP
result=`sed -n '1,3p' 1.txt > 2.txt` #筛选1-3行
echo -e "$result\n"
result=`sed 's/\(This\)\(is\)\(string\)/\1\3\2\/'` #调整字符显示顺序
# 's/a/A/g &/' 1.txt`
#'s;<[^>]*>;;g' 1.txt` #";"替代"/"
#'s/<[^>]*>//g' 1.txt` #筛选伪标签
#'2,4 s/a/A/g' 1.txt ` #> 2.txt #替换文本{g:全局;指定行号}
#'0~2 p' 1.txt > 2.txt` #筛选偶数行
#'1~2 p' 1.txt > 2.txt` #筛选奇数行
#'$,p' 1.txt > 2.txt #筛选首行
echo -e "$result\n"
#删除文本
result=`sed -e '0~2 d' 1.txt > 2.txt` #偶数行
#'$ d' 1.txt > 2.txt #末行
#'1 d' 1.txt > 2.txt` #首行
echo -e "$result\n"
#追加文本
result=`sed -e '2 a shell scripts' 1.txt > 2.txt`
echo -e "$result\n"
FTP
#插入文本
expr=`sed '$ i end string insert' 1.txt > 2.txt`
echo -e "$expr\n"
#=======================sed组合==================
result=`sed -n -e 's/a/A/g' -e '1,2 p' 1.txt` #替换+截取
echo -e "$result\n"
result_x=`sed -e 's/b/B/g;2 i Shell Script' 1.txt` #替换+插入(;独立执行)
echo -e "$result_x\n"
result_y=`sed -n 1,5'{
#替换+截取+插入
s/a/A/g
s/b/B/g
2 i Shell Script
p
}' 1.txt`
echo -e "$result_y\n"
#读取
result_z=`sed -n 1,5'{
f /etc/sysconfig/selinux
p
}' selinux_backup`
echo -e "$result_z\n"
#=============================awk=======================
#输出
Test_Var=`awk '{ print }' 1.txt` #基本输出{ print }
echo "$Test_Var"
Test_Var_One= `awk -f test.awk 1.txt` #文件读入输出
echo "$Test_Var_One"
#!/bin/awk -f #可执行文件输出
{ print }
#匹配
Test_Var_Tow=`awk '$2>100 { print } ' 1.txt` #$列数变量匹配
echo "$Test_Var_Tow"
Test_Var_There=`awk '/^(a|b)/ { print }' 1.txt` #匹配多个字母开头
#'/^a/ { print }' 1.txt` #匹配开头
echo "$Test_Var_There"
Test_Var_Four=`awk '/^a/ && $2 > 100 { print }' 1.txt`
echo "$Test_Var_Four"
#! /bin/awk -f
#函数
BEGIN{
#x="shell sciprt"
print index("shell script","script") #位置
print length("shell script") #长度
match("shell script",/o/) #正则匹配字符出现位置及长度
print RSTART ,RLENGTH
string="5a123B4"
split(string,arry,/[aB]/) #分割数组
print arry[0]
print arry[1]
print arry[2]
string="abc001dad0adadabc015"
sub(/(abc)+[0-9]*/,"(&)",string)
print string #选取特定字符赋予标记
rsub(/(abc)+[0-9]*/,"(&)",string)
print string
array[0]="a"
array[2]="b"
array[1]="c"
array[5]="r"
for ( i in array){ #遍历数组
print i
}
}
:<<EOF
{
grade=($2>100? "A":"B") #条件运算符
print $grade
}
{
print
print "===========" #记录分割符
#x="shell" "script" #awk变量
#print x
}
BEGIN{
RS="" #记录分割符
FS="\n" #字段分割符
}
{
print $1
}
EOF
:<<EOF
BEGIN { #开始模式
print "shell start"
}
{ print }
END { #结束模式
print "shell over"
}
EOF
:<<EOF
Test_Var_Four=`awk '/^a/ && $2 > 100 { print }' 1.txt` #混合模式
echo "$Test_Var_Four"
Test_Var_Five=`awk '/^a/ $2==21 { print } ' 1.txt` #区间模式
echo "$Test_Var_Five"
EOF
正则匹配
#!/bin/bash
#----------------RE基础正则表达式------
:<<FTP
str=`ls /bin | grep "^t"` #匹配开头
echo $str
end=`ls /bin | grep "g$"` #匹配结尾
echo $end
cd /home
touch a
touch a1
touch b2
single=`ls /home | grep "a."` #匹配任意一个指定字符
echo $single
str=`ls /bin | grep "^aaa*"` #匹配重复出现的字符
echo $str
str=`ls /bin | grep "^[^a-b]"` #"^[a-b]"` #匹配范围和范围之外
echo $str
cd /home
rm -rf *
touch a
touch aaa
str=`ls /bin | grep "a\{2,\3}"`
echo $str
echo "Shell Script" > test.sh
str=`cat ./test.sh | grep "/<S" #"t\>"` #匹配含有字符开头|结尾的字符串
echo $str
FTP
#-------------------ERE扩展正则表达式---
:<<cat
str=`ls /etc/ | egrep "^ss?"` #+" #匹配出现至少至多一次的字符
echo $str
str=`ls /bin/ | egrep "(ls | w | p$)"` #(),|匹配元素子集或
echo $str
touch a
touch b
touch c
str=`ls ./ | egrep "(a | c )"`
echo $str
#----------------Perl正则表达式------
str=`ls /etc/ | grep -P "rc/D"` #"rc\d"` #匹配|非0-9数字
echo $str
#字符集
str=`ls /bin | grep "[:dight:]"`
echo $str
#--------正则表达式应用--------
str=`cat /etc/aliases | grep "^a"`
echo $str
str=`grep "\." 1.txt` #匹配转义
echo $str
cat
#字符集匹配
str=`egrep "800-[[:digit:]]${4}-[[:digit"]]${3} 1.txt"`
echo $str
str=`egrep "[[:digit:]]{4}$" 1.txt` #^[[:digit:]]{3}" 1.txt`
echo $str
#筛选3个数字开头|结尾
str=`egrep "^([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}$" 1.txt`
echo $str
#正则运算优先级和子运算符
str=`ls /bin/[a-b]*` #通配符
echo $str
函数
#!/bin/bash
#------------------------函数--------------------------------
function Test_Function(){ #定义函数法一
echo "这是一个测试函数"
}
Test_Function #调用函数
Test_Tow_Function(){
echo "这是另一种测试函数"
}
Test_Tow_Function
function GetCureentTime(){
Cureent_Time=`date` #获取当前时间
echo "$Cureent_Time"
}
#必须在函数定义后的位置调用这个函数
GetCureentTime
function SonLinkOneFunction(){
echo "这是第一个子链接函数"
}
function SonLinkTowFunction(){
echo "这是第二个子链接函数"
}
function ParentLinkFunction(){
SonLinkOneFunction #在父函数内调用定义的子链接函数
SonLinkTowFunction
}
Sum(){
let "z=$1 + $2"
return "$z" #函数返回值
}
Sum 10 40 #调用sum函数
echo "$?" #返回状态码
#接受自定义字符
echo "请输入你希望计算的字符"
read x
str=$1
result=0
Length(){
#计算这个字符的长度
if [ "str" != "" ];then #判断字符不为空,不算长度
result=${#str}
#statements
fi
echo "$result"
}
Char_Test=$(Length $x) #调用这个长度函数,代入自定义参数
echo "这个字符的长度是 $Char_Test"
function AliasFunction(){
Alias ls -Z='ls' #别名
}
AliasFunction
unset AliasFunction #删除函数
Out_Var="This is Function Out Var"
function VarFunction(){
Out_Var="Change This Out_Var"
echo "$Out_Var" #在函数内调用经函数改变的变量
local In_var="This is Function In Var"
#定义局部变量,全局调用是将无输出结果
}
VarFunction
echo "$In_var" #在函数外调用函数内的变量
function ChanSuoFcuntion(){
echo "The Cureent ChanSuo length is $#"
echo "The Cureent ChanSuo Sum is $@"
echo "The Cureent ChanSuo name is $0"
}
#ChanSuoFcuntion a b c d #赋予参数,计算个数
ChanSuoFcuntion "Shell Script"
#ChanSuoFcuntion a b c d #赋予参数,计算个数
ChanSuoFcuntion "Shell Script"
function MoveFunction(){
while(( $# > 0))
do
echo "$1"
shift #把参数向前移动一个单位长度
done
}
MoveFunction
#!/bin/bash
function ChanSuoFcuntion(){
echo "The Cureent ChanSuo length is $#"
echo "The Cureent ChanSuo Sum is $@"
echo "The Cureent ChanSuo name is $0"
#参数的位置
}
#ChanSuoFcuntion a b c d #赋予参数,计算个数
ChanSuoFcuntion "Shell Script"
function MoveFunction(){
while(( $# > 0))
do
echo "$1"
shift #把参数向前移动一个单位长度
done
}
MoveFunction
function TestFucntion(){
while getopts "a:b:c" arg #接受参数保存在$OPTAGR中
do
case "$arg" in
a)
echo "a'$OPTARG";;
b)
echo "b'$OPTARG";;
c)
echo "c";;
?)
echo "Unkown"
exit 1;;
esac
done
}
TestFucntion -a "shell" -b "script"
function TestTowFucntion(){
echo "$1"
}
name=shell
type=name
TestTowFucntion $type #调用变量
TestTowFucntion ${!name} #间接调用变量
file=/bin/ls
function HaveFunction(){
if [[ -e $file ]]; then
echo "The file have"
else
echo "The file not have"
#statements
fi
}
HaveFunction
file=/bin/a #修改函数条件测试值
HaveFunction
function ArrayFunction(){
echo "The number is $#"
while [[ $# -gt 0 ]]
do
echo "$1"
shift
done
}
a=(a,b,"cd",e)
ArrayFunction "${a[@]}" #获取数组参数值
. lib.sh #载入库文件
mesg="This is a file"
Erro "$mesg" #调用库文件函数
function DiGuiFunction(){
read y
DiGuiFunction "$y" #递归函数
echo "$y"
}
DiGuiFunction
function Factor(){
local n=$1; #定义一个本地变量
if [ $n -eq 0 ]
then #计算n等于1时的阶乘
result=1
else #不等于1的1阶乘
let "m=n-1"
fact "$m"
let "result=$n*$?"
fi
return "$result"
}
Factor $1
echo "$1 DiGui is $?"
逻辑语句
#条件语句
#---------------------------if------------------------------------
#!/bin/bash#嵌套双分支
echo "input your socre:"
read socre
if [ -z "$score" ]; then
echo "your score is null,please input aegin"
else
if [ "$score" -lt 100 -a "$score" -gt 0];then
echo "your score is right,you can continue excute"
else
if [ "$score" = 90 ];then
echo "Your score level is A"
else
if [ "$score"=70];then
echo "Your score level is B"
if [ "$score"=60];
echo "Your score level is C"
else
echo "Your score level is D"
fi
fi
fi
#statements
fi
echo "please input your score"#多分支
read score
if [ -z "$score" ];then#判断分数是否为空值
echo "your score is null,please input aegin"
else
if [ "$z" -ge 100 -a "$z" -le 0 ];then#判断分数是否在[0,100]之间
echo "your score not between 0 and 100,please agin"
read score #重新读取用户输入
else
if[ "$z" -le 60 ]; then
echo "your score is D"
elif[ "$z" -le 70 ];then
echo "your score is C"
elif[ "$z" -le 80 ];then
echo "your score is B"
else
echo "your score is A"
fi
fi
fi
if [ -e "$1" ];then#判断文件是否存在
echo "$1 file have"
exit 1#文件不存在状态码
else
touch "$1"
echo "$1 file created"#不存在创建
exit 0#文件存在状态码
fi
#----------------------------------for---------------------
#!/bin/bash
for (( i = 0; i < 10; i++ ));do
if [[ "$i%2" -eq 0 ]];then
continue#跳出这个输出
#statements
fi
echo "$i"#输出所有奇数
#statements
done
for i in a b c d
do
echo -n "$i"
for j in `seq 10`
do
if [ $j -eq 5 ]; then
#break 2#退出状态码
continue 2 #跳出状态码
#statements
fi
echo -n "$j"
done
echo
#statements
done
#!/bin/bash
for((i=0;i<10;i++));do #嵌套循环
for (( j=0;j<i;j++ )); do
let "product=i*j"
printf "$i*$j=$product"
if [[ $product -gt 10 ]]; then
echo " "
else
echo " "
#statements
fi
if [[ $product -ge 5 ]]; then#内层循环条件中断
break 2
#statements
fi
#statements
done
echo
done
if [[ $product -gt 5 ]]#外层循环条件中断
then
break#中断这部分的输出
fi
#for i in `ls .`#for..in循环
#do
#if echo "$i" | grep "a"
#then
#echo "$i"
#fi
#done
for i in [1..10] #1 2 3 5 8
do
echo "The Cureent number is $i"
done
total=0#for循环
for i in {1..100..2} #1 2 3 5 8#{start,end,步长}
do
let "total=total+i"
#echo "The Cureent number is $i"
done
echo "total is $total"
for days in {M T S T F S S}#列表值
do
echo "Today is $days"
done
for x in $(ls) #* #"ls" #循环显示命令
do
echo "$x"
done
echo "$*"#接受输入所有的参数
for arg in "$*"
do
echo "${arg}"
done
for arg in#不带列表的for
do
echo "${arg}"
done
x="a"
for ((;;)) #类c的死循环 #((i=0;i<=5;i++))#类c的for
do
echo "$x"
done
array=(M,T,T,F,S,S)#处理数组
for i in ${array[*]}
do
echo "$i"
done
#---------------------------while--------------------------
wile getopt ":pq:"y:#while循环
do
case $y in
"p")
echo "$y";;
"q")
echo "$x $y";;
"::")
echo "$x";;
"?")
echo "$x
"*")
echo "z";;";;
esac
echo "w"
done
while [[ i=0;i<9;i++ ]]; do
while [[ j=0;j<i;i++ ]]; do
if [[ j -gt 9 ]]; then
let "product=i*j"
printf "$i*$j=$product"
#statements
else
echo " "
echo " "
fi
#statements
done
echo
#statements
done
echo "please input your number,must between 1 and 10,and 0 exits"
read number
while [[ "$number" != 0 ]]; do #while判断计数
#echo "you can input"
#read number#再次读取用户输入
if [ "$number" -lt 5 ];then#多分支判断准确输入
echo "sorry,your number lt 5"
read number
elif [ "$number" -gt 5 ];then
echo "sorry,your number gt 5"
read number
else
echo "Configuration,You are right!"
exit 0#退出
fi
#statements
#statements
done
while [[ "$i" -lt 10 ]]; do #while循环
let "square=i*i"#let条件计算
echo "$i*$i=$square"
let "i++"#自增计数器
#statements
done
#------------------------util-----------------------
i=1
until [[ "$i" -gt 10 ]]; do
#开始until循环,条件测试i>10时退出until循环
let "square=i*i"#let条件计算
echo "$i*$i=$square"
let "i++"#自增计数器
#statements
done#中断
i=1
until [[ "$i" -ge 21 ]];do
userdel user$i#代入计数器i,执行创建用户
#echo "123" | passwd --stdin user$i >> /dev/null #设置密码
let "i++"#自增
#statements
done
i=1
until [[ "$i" -gt 10 ]]; do #开始until循环,当i>10时退出until循环
let "square=i*i"#条件
echo "$i*$i=$square"
let "i++"#自增计数器
#statements
done
#-------------------------case-----------------------------
echo "please input your char"
read char
case $char in #接受变量
[[:upper:]])#判断条件1
echo "your char is letter";;#结束
[[:lower:]])
echo "your char is lower";;
[0-9])
echo "your char is number";;
*)#默认
echo "your char is other";;
esac#终止循环$
数组
#----------数组--------
#!/bin/bash
array[0]="shell"#数组标准定义
array[2]="script"
echo "${array[@]}"#数组输出
declare -a x#修饰数组
x[0]="shell"
x[3]="script"
echo "${x[@]}"
array=(1,2,3,4,5)#集合定义数组
echo "The array firset is ${#array[0]}"
echo "The array is ${array[@]}"
echo "The array is length ${#array[@]}"
array=([0]="a",[1]="b",[3]="c")#键值对定义数组
echo "The array is ${array[@]}"
array="shell script" #数组和普通变量
echo "${array[*]}"
echo "${array[@]}"
Students=(Jark Tindy Marks Roses)
echo "Students have ${Students[*]}"
declare -A Grandes
Grandes=([jark]=50 [tindy]=90 [marks]=69 [roses]=30)
echo "Jark Grandes is ${Grandes[jark]}"
Students[jark]=90#通过索引修改关联数组元素值
echo "Jark Grandes is ${Grandes[jark]}"
x=(a b c)
echo "${x[@]}"
x=(a b)#数组值的覆盖
echo "${x[*]}"
array=( 1 2 )
echo "${array[@]}"
array[2]=3#向数组末尾追加元素
echo "${array[@]}"
declare -A array #管理数组追加元素
array=([a]=1 [b]=2)
echo "${array[@]}"
array[c]=3
echo "${array[@]}"
for i in {1..10}#for为数组赋值
do
array[$i]=$i
done
echo "${array[*]}"
array=(array[0]="Python" array[1]="Javascript" )
for i in {1..2}#循环输出数组
do
echo "${array[$i]}"
done
x=("a" "b" "c")
echo "${x}"#访问数组默认下表0
echo "${x[1]}"#逐个访问
array=("a" "b" "c" "d" "e" "f")
len="${#array[@]}"#获取数组长度
for((i=0;i<=$len;i++)){
echo "${array[$i]}"
}
array=("a" "b" "c")
for e in "${array[@]}"#数组所有元素作为for条件
do
echo "$e"
done
array=("A" "B" "C")
echo "${array[*]:1:1}"#数组切片start::step
x=(1 2 3)
x=("${x[@]/2/20}")#数组元素的替换
echo "$x"
echo "${x[*]/1/100}"
y=("a" "b" "c")
echo "Old Legth is ${#y[@]}"
unset y[1]#删除数组元素
echo "New Legth is ${#y[@]}"
y2=("${y[@]}")#复制数组
echo "Copy is ${y2[*]}"
#unset y#删除全部数组
#echo "${y[@]}"
x=("Python" "Javascript" "Php" )
y=("Micrsoft" "Mac" "Linux")
z=("${x[@]}" "${y[@]}")#连接数组
echo "${z[@]}"
echo "1 2 3" > ./1#文本导入数组
content=(`cat 1`)
echo "${content[*]}"
运算符及表达式和条件测试
#-----------------------------运算符及表达式和条件测试----------------
#!/bin/bash
#source,sh,./shell_name :shell脚本执行方法
#
#变量
#declare :修饰
x=10/2
echo "$x"
#将变量修饰为只读
declare -r x
x="a"#再次为变量赋值检验修饰
echo "$x"
|
#将变量修饰为只为整数
declare -i x
x=10
echo "$x"
#typeset <=> declare
y=8/2
echo "$y"
typeset-i y
y="b"
echo "$y"
#x=1;
#w=9;
#let "x+1"
#echo "$x"
#y="$(x+w)";
#z="a";
#echo "$x $y $z";
:<<cat
Alias rm="rm -i"
#./home/user_name,/etc/profile,/etc/bashrc用户shell的配置文件
more shells#shell的种类
echo "$SHELL '当前shell的版本是' $BASH_VERSION" #打印当前使用shell类型
echo "hello world"
echo "$?"#shell退出状态码<0-255>
abc
echo "$?"
#exit 120
#echo "$?"
cat
:<<ftp #多行注释
echo "$#" #返回传入参数的个数 #单行注释
echo "$@"
echo "$0" #返回当前脚本的名称
echo "$_"
echo "$*" #分别列出参数
#!/bin/bash
#关于引号 "" ,'',``
test [ 1 -eq 2]
echo "$$"#进程pid
echo "$0"#脚本名称
echo "$1\=$1$2\=$2$4\=$4"
#环境变量
echo "$pwd"
echo "$LOGINAME"
set | more#显示可建立的全部环境变量
x=123
unset $x#清除变量
echo $x
cd /bin
ls t*#通配开头
x=`pwd`
echo "cureent directory is $x"
echo 'cureent directory is $x'
#echo ${x}abc#"{}变量分界符"
:<<FTP
echo "开始你的程序"
read "$z"
echo "当前所在的目录是 `pwd` and 你主机的地址是 `ifconfig`"
echo "程序结束"
result=`expr 3 / 2`
echo "$result"#expr:算数计算符
#result=`expr \(1 * 2\)\ + 1`
#echo "$result"
result=$(( 10 + 90 / 2 ))#$(()):算数运算符
echo "$result"
#$[]算数运算符
result=$[ 5*2 ]
echo "$result"
n=1#let算数运算符
let n=n+1
echo "$n"
result=`expr 4 += 6`
echo "$result"
#!/bin/bash
result=$((4 += 6))#复合算数运算符
echo "$result"
:<<FTP#位运算符
x=let "2 >> 1 "#2的二进制向右移一位
echo "$x"
y=$[ "$x" ~= 1 ]#变量x与1异或
echo "y"
z=`expr 1 ^ 0`#1和0取反
echo $z
FTP
result=$[ 2 << 1 ]
echo "$result"
x=1
result=$[ x |= 2 ]#位复合运算符
echo "$result"
y=5#自增自减运算符
result=$[ y+(++y) ]
echo "$result"
result=$((result++))
echo "$result"
result=$[ --result ]
echo "$result"
#法一:
((x=201))#二,八,十六进制
echo "$x"
((y=021))
echo "$y"
((z=0x21))
echo "$z"
#法二
((x=2#201))
echo "$x"
((y=8#201))
echo "$y"
((z=16#201))
echo "$z"
#条件语句#---------------------------if------------------------------------
#!/bin/bash#嵌套双分支 echo "input your socre:"read socreif [ -z "$score" ]; thenecho "your score is null,please input aegin"elseif [ "$score" -lt 100 -a "$score" -gt 0];thenecho "your score is right,you can continue excute"elseif [ "$score" = 90 ];thenecho "Your score level is A"elseif [ "$score"=70];thenecho "Your score level is B"if [ "$score"=60];echo "Your score level is C"elseecho "Your score level is D"
fififi#statementsfiecho "please input your score"#多分支read scoreif [ -z "$score" ];then#判断分数是否为空值echo "your score is null,please input aegin"elseif [ "$z" -ge 100 -a "$z" -le 0 ];then#判断分数是否在[0,100]之间echo "your score not between 0 and 100,please agin"read score #重新读取用户输入elseif[ "$z" -le 60 ]; thenecho "your score is D"elif[ "$z" -le 70 ];thenecho "your score is C"elif[ "$z" -le 80 ];thenecho "your score is B"elseecho "your score is A"fi
fifiif [ -e "$1" ];then#判断文件是否存在echo "$1 file have"exit 1#文件不存在状态码else touch "$1"echo "$1 file created"#不存在创建exit 0#文件存在状态码fi
#----------------------------------for---------------------
#!/bin/bashfor (( i = 0; i < 10; i++ ));doif [[ "$i%2" -eq 0 ]];thencontinue#跳出这个输出#statementsfiecho "$i"#输出所有奇数#statementsdone
for i in a b c d doecho -n "$i"for j in `seq 10` doif [ $j -eq 5 ]; then#break 2#退出状态码continue 2 #跳出状态码#statementsfiecho -n "$j"doneecho #statementsdone
#!/bin/bashfor((i=0;i<10;i++));do #嵌套循环for (( j=0;j<i;j++ )); dolet "product=i*j"printf "$i*$j=$product"if [[ $product -gt 10 ]]; thenecho " "elseecho " "#statementsfiif [[ $product -ge 5 ]]; then#内层循环条件中断break 2 #statementsfi#statementsdoneecho done
if [[ $product -gt 5 ]]#外层循环条件中断thenbreak#中断这部分的输出fi
#for i in `ls .`#for..in循环#do#if echo "$i" | grep "a"#then#echo "$i"#fi#done
for i in [1..10] #1 2 3 5 8doecho "The Cureent number is $i"done
total=0#for循环for i in {1..100..2} #1 2 3 5 8#{start,end,步长}dolet "total=total+i"#echo "The Cureent number is $i"doneecho "total is $total"
for days in {M T S T F S S}#列表值do echo "Today is $days"done
for x in $(ls) #* #"ls" #循环显示命令doecho "$x"done
echo "$*"#接受输入所有的参数for arg in "$*"doecho "${arg}"done
for arg in#不带列表的fordo echo "${arg}"done
x="a"for ((;;)) #类c的死循环 #((i=0;i<=5;i++))#类c的fordoecho "$x"done
array=(M,T,T,F,S,S)#处理数组for i in ${array[*]}doecho "$i"done
#---------------------------while--------------------------
wile getopt ":pq:"y:#while循环docase $y in"p")echo "$y";;"q")echo "$x $y";;"::")echo "$x";;"?")echo "$x"*")echo "z";;";;esacecho "w"done
while [[ i=0;i<9;i++ ]]; dowhile [[ j=0;j<i;i++ ]]; doif [[ j -gt 9 ]]; thenlet "product=i*j"printf "$i*$j=$product"#statementselseecho " "echo " "fi#statementsdoneecho#statementsdone
echo "please input your number,must between 1 and 10,and 0 exits"read numberwhile [[ "$number" != 0 ]]; do #while判断计数#echo "you can input"#read number#再次读取用户输入if [ "$number" -lt 5 ];then#多分支判断准确输入echo "sorry,your number lt 5"read numberelif [ "$number" -gt 5 ];thenecho "sorry,your number gt 5"read numberelseecho "Configuration,You are right!"exit 0#退出fi#statements#statementsdone
while [[ "$i" -lt 10 ]]; do #while循环let "square=i*i"#let条件计算echo "$i*$i=$square"let "i++"#自增计数器#statementsdone
#------------------------util-----------------------
i=1until [[ "$i" -gt 10 ]]; do #开始until循环,条件测试i>10时退出until循环let "square=i*i"#let条件计算echo "$i*$i=$square"let "i++"#自增计数器#statementsdone#中断
i=1until [[ "$i" -ge 21 ]];douserdel user$i#代入计数器i,执行创建用户#echo "123" | passwd --stdin user$i >> /dev/null #设置密码let "i++"#自增#statementsdone
i=1until [[ "$i" -gt 10 ]]; do #开始until循环,当i>10时退出until循环let "square=i*i"#条件echo "$i*$i=$square"let "i++"#自增计数器#statementsdone
#-------------------------case-----------------------------
echo "please input your char"read char case $char in #接受变量[[:upper:]])#判断条件1echo "your char is letter";;#结束[[:lower:]])echo "your char is lower";;[0-9])echo "your char is number";;*)#默认echo "your char is other";;esac#终止循环$
【shell脚本学习-4】的更多相关文章
- 笔记——shell脚本学习指南
<shell脚本学习指南>机械工业出版 ISBN 987-7-111-25504-8 第2章 2.4 初级陷阱 1.当今的系统,对#!这一行的长度限制从63到1024个字符都有,尽量不要超 ...
- Shell 脚本学习资料搜集
Shell文档 ChinaUnix上大神“網中人”总结的Shell十三问,强烈推荐,这本书讲得比较精炼,而且都是一些Shell学习中容易把握不住的一些细节难点.每一问都写得非常精彩.ChinaUnix ...
- 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...
- 转 shell脚本学习指南
shell脚本学习指南 以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题 ...
- Shell脚本学习 - 运算符
继续shell脚本学习.上一篇是基本数据类型和语法的总结,这一篇是运算相关的操作. 运算符 bash不支持简单的数学计算,需要依赖其他命令实现. expr可以代为实现. # 表达式一般这么写 ` + ...
- shell脚本学习总结02--数组
bash同时支持普通数组个关联数组,普通数组只能使用整数作为数组的索引,关联数组可以使用字符串作为数组的索引. 数组的定义方法: 在单行中使用一列值定义一个数组 [root@new ~]# array ...
- Shell脚本学习指南笔记
Shell脚本学习指南 作者:Danbo 2015-8-3 脚本编程语言与编译型语言的差异 许多中型.大型的程序都是用编译型语言写的,例如:C.C+.Java等.这类程序只要从源代码(Source C ...
- shell脚本学习之6小时搞定(1)
shell脚本学习之6小时搞定(1) 简介 Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本. Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把 ...
- shell脚本学习心得
近来主要捣鼓ubuntu,大多数项目中都用到了sh脚本作为启动脚本等,以前只是大概明白如何使用,今天需要自己修改并运行脚本就碰到了很多问题,所以决定静下心来学习一下shell脚本,学习了几个小时,现将 ...
- shell脚本学习(一)
Shell脚本最常用于系统管理工作,或者用于结合现有的程序以完成小型.特定的工作. Shell的特点有: 1. 简单性 2. 可移植性 3. 开发容易 [什么是shell] 简单点理解,就是系统跟计算 ...
随机推荐
- Web前端面试指导(九):盒子模型你是怎么理解的?
问题分析 这道题问得比较宽泛,一定要找准切入点,如果切入点找不准,很容易乱答,甚至答偏,所以找准切入点是非常的重要的. 解答思路 1)盒子模型有两种,W3C和IE盒子模型 (1)W3C定义的盒子模型包 ...
- 类数组arguments
var isArray = function(){ return arguments; } isArray(1,2,3); // 返回[1,2,3] isArray.call(null,1,2,3); ...
- piranha配置
典型的高可用负载均衡 1)lvs + ldirectord + heartbeat lvs(ipvsadmin) 调度器,将用户请求分发到后端真实服务器,不负责健康检查 ldirectord 服务监控 ...
- nginx配置+uwsgi+负载均衡配置
nginx静态文件配置 location /static{ alias /var/www/myApp/static; } sudo mkdir -vp /var/www/myApp/static/ s ...
- Selenium2学习(七)-- 定位一组元素find_elements
前言 前面的几篇都是讲如何定位一个元素,有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象. webdriver 提供了定位一组元素的方法,跟前面八种定位方式 ...
- Type Syntax error, insert ")" to complete Expression
今天倒持了 几个小时! 愣是 没有明确 ,为什么我的JSP的第一行没有代码? 还是报错! 错误是: Description Resource Path Location Type Sy ...
- 前端:Bootstrap框架
一,bootstrap介绍 Bootstrap是Twitter开源的基于HTML.CSS.JavaScript的前端框架. 它是为实现快速开发Web应用程序而设计的一套前端工具包. 它支持响应式布局, ...
- CENTOS 6 通过YUM升级GCC到4.7/4.8
第一阶段:升级到4.7 [root@01314.CN ~]# cd /etc/yum.repos.d [root@01314.CN yum.repos.d]# wget http://people.c ...
- HDU 1298 T9【字典树增加||查询】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1298 T9 Time Limit: 2000/1000 MS (Java/Others) Memo ...
- 【翻译】苹果官网的命名规范之 Code Naming Basics-General Principles
苹果官方原文链接:General Principles 代码命名基本原则:通用规范 代码含义清晰 尽可能将代码写的简洁并且明白是最好的,不过代码清晰度不应该因为过度的简洁而受到影响.例如: 代码 ...