Linux基础部分的学习(4)-shell语法学习2-创新互联
文章目录
前言
一、printf命令
本文标题:Linux基础部分的学习(4)-shell语法学习2-创新互联
当前网址:http://scyanting.com/article/digidi.html
- 前言
- 一、printf命令
- 二、test命令与判断符号[]
- 1.逻辑运算符&&和||
- 2.test命令
- 3.文件类型判断
- 4.文件权限判断
- 5.整数间的比较
- 6.字符串比较
- 7.多重条件判定
- 8.判断符号[]
- 三、判断语句
- 单层if
- 单层if-else
- 多层if-elif-elif-else
- case…esac形式
- 四、循环语句
- 1.命令格式1:
- 2.,命令格式2
- 3.while…do…done循环
- 4.until…do…done循环
- 5.break命令
- 6.continue命令
- 五、函数
- 六-exit命令
- 七--文件重定向
- 八 --引入外部脚本
前言
古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。——苏轼
一、printf命令
printf命令用于格式化输出,类似于C/C++中的printf函数。
printf "%10d.\n" 123 # 占10位,右对齐
printf "%-10.2f.\n" 123.123321 # 占10位,保留2位小数,左对齐
printf "My name is %s\n" "yxc" # 格式化输出字符串
printf "%d * %d = %d\n" 2 3 `expr 2 \* 3` # 表达式的值作为参数
二、test命令与判断符号[]
1.逻辑运算符&&和||- && 表示与,|| 表示或
- 二者具有短路原则: expr1 && expr2:当expr1为假时,直接忽略expr2 expr1 ||expr2:当expr1为真时,直接忽略expr2
- 表达式的exit code为0,表示真;为非零,表示假。(与C/C++中的定义相反)
test命令用于判断文件类型,以及对变量做比较。
test命令用exit code返回结果,而不是使用stdout。0表示真,非0表示假。
acs@9e0ebfcd82d7:~$ ls # 列出当前目录下的所有文件
homework output.txt test.sh tmp
acs@9e0ebfcd82d7:~$ test -e test.sh && echo "exist" || echo "Not exist"
exist # test.sh 文件存在
acs@9e0ebfcd82d7:~$ test -e test2.sh && echo "exist" || echo "Not exist"
Not exist # testh2.sh 文件不存在
代码如下(示例):
test 2 -lt 3 # 为真,返回值为0
echo $? # 输出上个命令的返回值,输出0
3.文件类型判断命令格式:
test -e filename # 判断文件是否存在
4.文件权限判断test -r filename # 判断文件是否可读
5.整数间的比较test $a -eq $b # a是否等于b
6.字符串比较7.多重条件判定test -r filename -a -x filename
8.判断符号[][]与test用法几乎一模一样,更常用于if语句中。另外[[]]是[]的加强版,支持的特性更多。
[ 2 -lt 3 ] # 为真,返回值为0
echo $? # 输出上个命令的返回值,输出0
注意
[]内的每一项都要用空格隔开
中括号内的变量,最好用双引号括起来
中括号内的常数,最好用单或双引号括起来
三、判断语句if…then形式
类似于C/C++中的if-else语句。
单层ifif condition
then
语句1
语句2
...
fi
单层if-else示例:
if condition
then
语句1
语句2
...
else
语句1
语句2
...
fi
多层if-elif-elif-else示例:
if condition
then
语句1
语句2
...
elif condition
then
语句1
语句2
...
elif condition
then
语句1
语句2
else
语句1
语句2
...
fi
case…esac形式示例
case $变量名称 in
值1)
语句1
语句2
...
;; # 类似于C/C++中的break
值2)
语句1
语句2
...
;;
*) # 类似于C/C++中的default
语句1
语句2
...
;;
esac
四、循环语句 1.命令格式1:示例
for var in val1 val2 val3
do
语句1
语句2
...
done
示例
示例二
输出当前路径下的所有文件名,每个文件名一行:
for file in `ls`
do
echo $file
done
示例三(输出1-10,10个数)
for i in $(seq 1 10)
do
echo $i
done
示例四(使用{1…10} 或者 {a…z})
for i in {a..n}
do
echo $i
done
2.,命令格式2for ((expressi**加粗样式**on; condition; expression))
do
语句1
语句2
done
3.while…do…done循环示例
while condition
do
语句1
语句2
...
done
4.until…do…done循环示例
当条件为真时结束。
until condition
do
语句1
语句2
...
done
5.break命令
跳出当前一层循环,注意与C/C++不同的是:break不能跳出case语句。
while read name
do
for ((i=1;i<=10;i++))
do
case $i in
8)
break
;;
*)
echo $i
;;
esac
done
done
6.continue命令for ((i=1;i<=10;i++))
do
if [ `expr $i % 2` -eq 0 ]
then
continue
fi
echo $i
done
五、函数bash中的函数类似于C/C++中的函数,但return的返回值与C/C++不同,返回的是exit code,取值为0-255,0表示正常结束。
如果想获取函数的输出结果,可以通过echo输出到stdout中,然后通过$(function_name)来获取stdout中的结果。
函数的return值可以通过$?来获取。
[function] func_name() {# function关键字可以省略
语句1
语句2
...
}
func() {name=yxc
echo "Hello $name"
}
func
func() {name=yxc
echo "Hello $name"
return 123
}
output=$(func)
ret=$?
echo "output = $output"
echo "return = $ret"
六-exit命令exit命令用来退出当前shell进程,并返回一个退出状态;使用$?可以接收这个退出状态。
exit命令可以接受一个整数值作为参数,代表退出状态。如果不指定,默认状态值是 0。
exit退出状态只能是一个介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败。
#! /bin/bash
if [ $# -ne 1 ] # 如果传入参数个数等于1,则正常退出;否则非正常退出。
then
echo "arguments not valid"
exit 1
else
echo "arguments valid"
exit 0
fi
七–文件重定向每个进程默认打开3个文件描述符:
- stdin标准输入,从命令行读取数据,文件描述符为0
- stdout标准输出,向命令行输出数据,文件描述符为1
- stderr标准错误输出,向命令行输出数据,文件描述符为2
可以用文件重定向将这三个文件重定向到其他文件中
命令 说明
command >file 将stdout重定向到file中
command< file 将stdin重定向到file中
command >>file 将stdout以追加方式重定向到file中
command n>file 将文件描述符n重定向到file中
command n>>file 将文件描述符n以追加方式重定向到file中
示例
echo -e "Hello \c">output.txt # 将stdout重定向到output.txt中
echo "World">>output.txt # 将字符串追加到output.txt中
read str< output.txt # 从output.txt中读取字符串
echo $str # 输出结果:Hello World``
八 --引入外部脚本语法格式
. filename # 注意点和文件名之间有一个空格
或
source filename
示例
创建test1.sh,内容为:
#! /bin/bash
name=yxc # 定义变量name
然后创建test2.sh,内容为:
#! /bin/bash
source test1.sh # 或 . test1.sh
echo My name is: $name # 可以使用test1.sh中的变量
执行命令:
acs@9e0ebfcd82d7:~$ chmod +x test2.sh
acs@9e0ebfcd82d7:~$ ./test2.sh
My name is: yxc
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
本文标题:Linux基础部分的学习(4)-shell语法学习2-创新互联
当前网址:http://scyanting.com/article/digidi.html