常用Shell脚本命令

通过一个整合了常用Shell脚本的命令的例子来快速上手Shell,达到可以写简单脚本和Shell脚本阅读的目的:

#!/bin/bash
#自学shell编程基本语句的demo例子集合
#20170616


echo "Hello  World !"
#变量,变量名与等号之间不能有空格
your_name="krs"
#使用一个定义过的变量,只要在变量前加$美元符即可
echo ${your_name}
#只读变量,使用readonly命令可以将变量定义为只读变量,只读变量的状态不能改变
readonly myUrl="www.dd.cc"
#删除变量,变量被删除之后不能被再次使用,unset指令不能删除只读变量
unset your_name





#Shell字符串,可以使用单引号(原样输出,单引号中的变量是无效的)或者双引号(双引号里可以有变量)
your_name='qin'
str='this is a String'
str_double="Hello,${your_name}"
echo str_double
#获取字符串长
string="abcd"
echo ${#string}#输出4
#提取子字符串
echo ${str:1:3}#输出his,注意是从0开始计数




#Shell数组,bash支持一维数组(不支持多维数组),并且没有限定数组大小

#定义数组,在Shell中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为
array_name=("zara" "dsaf" "dasfsad")
array_name[4]="dsdf"
array_name[6]="sdafrg"#可以使用不连续的下标,而且下标的范围没有限制
#读取数组,一般格式${array_name[index]}
echo "First Index: ${array_name[1]}"
#获取数组的长度
length=${#array_name[*]}#或者${#array_name[@]}
#获取数组单个元素的长度
lengthn=${#array_name[3]}


#Shell预设变量
for i in "$*";do
    echo $i
done



#Shell基本运算符,原生的bash不支持简单的数学运算,但是可以通过awk和expr等指令来实现
#expr是表达式计算工具,可以完成表达式求值
#表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2
val=`expr 2 + 2`
echo "两数之和为 : $val"
a=2
b=2
#条件表达式要放在方括号之间,并且要有空格
if [ $a == $b ]
then
    echo "a等于b"
fi
if [ $a != $b ]
then
    echo "a不等于b"
fi


#乘法的特殊性,乘号(*)前边必须加反斜杠(\)才能实现乘法运算
val=`expr $a \* $b`
echo "a * b : $val"

#关系运算符 
#-eq是否相等,相等返回true
#-ne是否相等,不相等返回true
#-gt左边大于右边返回true
#-lt左边小于右边返回true
#-ge左边大于等于右边返回true
#-le左边小于右边返回true


#布尔运算符
# !非运算
# -o 或运算
# -a 与运算

if [ $a -lt 5 -o $b -gt 100 ]
then
   echo "$a -lt 100 -o $b -gt 100 : 返回 true"
else
   echo "$a -lt 100 -o $b -gt 100 : 返回 false"
fi

#逻辑运算符
# && 逻辑的AND
# || 逻辑的OR




#字符运算符
# = 检测两个字符串是否相等,相等返回true
# != 检测两个字符串是否相等,不相等返回true
# -z 字符串长度为0返回true 
# -n 字符串长度不为0返回true

#printf ,默认printf不会像 echo 自动添加换行符
#语法 printf  format-string  [arguments...] 
#format-string: 为格式控制字符串
#arguments: 为参数列表。

printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 

#%s %c %d %f都是格式替代符,
#%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
#%-4.2f 指格式化为小数,其中.2指保留2位小数。

#不换行
printf %s ab
# 没有引号也可以输出
printf "%s\n" abcdef
# 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
printf "%s %s %s\n" a b c d e f g h i j





#Shell流程控制,shell的流程控制不可为空

#if语句
a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi
#写成一行,适合作为终端命令: if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

#for循环

for loop in 1 2 3 4 5
do 
    echo "The value is: $loop"
done

#while语句
int=1
while(( $int<=5 ))
do 
    echo $int
    let "int++"
done

#let:用来执行算数和数值表达式测试

i=1
echo "i="$i
let i=i+2
echo "i="$i
let "i=i+4"
echo "i="$i


#函数,函数返回值在调用该函数后通过 $? 来获得

demoFun(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"
#带有return语句的函数
funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum$anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"
#带参数的函数,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数
funWithParam(){
    echo "第一个参数为 $1 "
    echo "第十个参数为 ${10} "
    echo "参数总数为 $# 个"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 56 85 34
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值