shell语法02

截图来自yxc

read命令:

read命令用于从标准输入中读取单行数据。当读到文件结束符时,exit code为1,否则为0。类比c++的cin
参数:
-p:后面可以接提示信息
-t:后面接秒数,超出秒数会自动忽略这条命令
例子:

echo命令

echo用于输出字符串

显示普通字符串:

echo "hello world" or echo hello world

显示转义字符

echo "\"hello world\"" # 结果为 "hello world"
也可不加引号:echo \"hello world\"
注意:单引号会原样输出,因此要用双引号

显示换行:

echo -e "hi\nkeqing"# -e:开启转义
hi
keqing

显示不换行:

echo -e hello \c # -e开启转义,\c不换行
echo world
结果:hello world

显示命令结果

echo `命令`

printf 命令

类似c++ printf ,格式化输出,默认不带回车
格式:printf format -string
例子:
printf "1+2=%d\n" 3
1+2=3

test命令和判断符号[]

test用exit code为输出结果,0为真。非0为假
test执行后是不会直接返回结果,我们查看上一条命令,echo #? 查看test结果

整数间的比较

字符串比较

判断符号[]

判断符号[] 和 test几乎一样,常用于if语句
注意:
[]内的每一项都要用空格隔开
中括号内的变量,最好用双引号括起来
中括号内的常数,最好用单或双引号括起来
例子:[ 3 -lt 4 ]

判断语句

单层if

if condition
 
 echo ...
fi

单层if else

if condition
then
  echo ...
else 
  echo ..
fi 

多层if

if condition1
then
  echo ...
elif condition2
then 
  echo ...
else 
  echo ...
fi 

case语句

case $变量名称 in
值1)
  语句。。
  ;; # 类似c++的break
值2)
  语句。。
  ;;
*) # 类似c++的default
  语句。。
  ;;
esac

循环语句

for in do done

格式:

for var in n1 n2 n3 
do
  echo $var
done

输出当前路径下的所有文件名,每个文件名一行:

for i in `ls`
do
  echo $i
done

输出有序数列110,az:

for i in {1..10}
do 
  echo $i
done

for ((…;…;…)) do…done

注意是两层括号
输出1~10:

for (( i=1; i <= 10; i ++))
do
  echo $i
done

while…do…done循环

格式:

while condition
do
   语句
done

例如不断读取

while read a
do
  echo $a
done

until…do…done循环

当条件为真结束
格式:

until condition
do
    语句1
    语句2
    ...
done

示例,当用户输入yes或者YES时结束,否则一直等待读入。

until [ "${word}" == "yes" ] || [ "${word}" == "YES" ]
do
    read -p "Please input yes/YES to stop this program: " word
done

break命令

跳出当前一层循环,注意与C/C++不同的是:break不能跳出case语句。

posted @ 2022-01-23 22:22  Gsding  阅读(37)  评论(0)    收藏  举报