Linux

Shell编程

2018-08-25  本文已影响9人  盗梦者_56f2

shell环境

一般常用的有两种,分别为:/bin/sh 和 /bin/bash
我们一般会在shell脚本的首行添加:#!/bin/sh 或者 #!/bin/bash
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
运行shell脚本的方式一般有两种:./test.sh (执行命令 chmod +x ./test.sh 使test.sh具有可执行权限) 和 sh test.sh 或者 bash test.sh

shell变量

#定义变量
val="Hello World"
#使用变量
echo ${your_name}
#定义只读变量
myVar="http://www.google.com"
readonly myVar
myVar="Hello world" #会报错,因为该变量是只读的。
#删除变量
unset myVar
#获取字符串长度
string="abcd"
echo ${#string} #输出 4
#截取字符串
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo
echo ${var:7} #从左边第几个字符开始,一直到结束。
echo ${var:0-7:3} #从右边第几个字符开始,及字符的个数
echo ${var:0-7} #从右边第几个字符开始,一直到结束。
echo ${var#*/} #其中 var 是变量名,# 号是运算符,*/表示从左边开始删除第一个 / 号及左边的所有字符
echo ${var##*/} # ##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
echo ${var%/*} # %/* 表示从右边开始,删除第一个 / 号及右边的字符
echo ${var%%/*} # %%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符

shell数组

#定义数组
array_name=(value0 value1 value2 value3)
#读取数组元素
valuen=${array_name[n]} # n为下标
#获取数组中的所有元素
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}

shell注释

以"#"开头的行就是注释,会被解释器忽略。
# 这是一个注释
#多行注释
:<<EOF
注释内容...
注释内容...
注释内容...
EOF

read命令

read -p "input a val:" a    #获取键盘输入的 a 变量数字 -p 参数由于设置提示信息
echo $a

expr命令

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

expr 1 + 2 #输出3
expr 5 \* 6      #输出30

shell传递参数

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,其中0 为执行的文件名。$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

shell文件包含

. filename   # 注意点号(.)和文件名中间有一空格
或
source filename

test命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

#数值测试
num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi
#字符串测试
num1="ru1noob"
num2="runoob"
if test $num1 = $num2
then
    echo '两个字符串相等!'
else
    echo '两个字符串不相等!'
fi
#文件测试
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi
-e 文件名  如果文件存在则为真
-s 文件名  如果文件存在且至少有一个字符则为真
-d 文件名  如果文件存在且为目录则为真
-f 文件名  如果文件存在且为普通文件则为真

echo命令

echo "It is a test"
echo "$name It is a test"
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo `date`

printf命令

#默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。
printf "Hello, Shell\n"
printf "%d %s\n" 1 "abc"
printf %s abc def #输出abcdef

shell流程控制

#判断语句
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi
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
#for循环
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done
for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done
for((i=1;i<=5;i++));do
    echo "这是第 $i 次调用";
done;
#while循环
while condition
do
    command
done
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done
while true
do
    command
done
#until循环
#until 循环执行一系列命令直至条件为 true 时停止。
#until 循环与 while 循环在处理方式上刚好相反。
until condition
do
    command
done
a=0

until [ ! $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done
#case语句
case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。

shell函数

[ function ] funname [()]

{

    action;

    [return int;]

}
demoFun(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"

shell从定向

command > file  将输出重定向到 file。
command < file  将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
command > file 2>&1 #将 stdout 和 stderr 合并后重定向到 file
command > /dev/null #如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null
#/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
command > /dev/null 2>&1 #如果希望屏蔽 stdout 和 stderr

let命令

let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式

let a=5+4
let b=9-3 
echo $a $b
上一篇 下一篇

猜你喜欢

热点阅读