쉘 프로그래밍 에코 문, 계산 방법, 루프 문 및 함수

에코 문

1.1 일반적으로 사용되는 Echo 이스케이프 문자

Echo -n은 줄
바꿈 없는 출력을 의미 합니다. Echo -e는 이스케이프 문자를 출력하고 이스케이프 된 내용을 화면에 출력합니다.

일반적인 이스케이프 문자 의역
\비 이스케이프 후 백 스페이스 키 (백 스페이스)를 누르는 것과 동일하지만 "\ b"뒤에 문자가 있다는 것을 전제로합니다. "\ b"는 이전 문자 삭제를 의미하고 "\ b \ b"는 처음 두 문자를 삭제하는 것을 의미합니다.
\씨 줄 바꿈없이 출력합니다. "\ c"뒤에 문자가 없으면 echo -n과 동일하지만 "\ c"뒤에 여전히 문자가 있으면 "\ c"뒤에 문자가 출력되지 않습니다.
\엔 줄 바꿈, 출력 할 문자는 "\ n"의 새 줄에서 시작합니다.
\ v 또는 \ f 줄 바꿈,하지만 줄 바꿈 후 새 줄의 시작 부분이 이전 줄의 끝에 연결됨
\티 탭 삽입, 즉 가로 탭을 의미합니다.
\아르 자형 커서가 줄의 시작 부분으로 이동하지만 줄 바꿈되지 않습니다. 이는 "\ r"앞의 동일한 길이의 문자를 덮어 쓰기 위해 "\ r"뒤의 문자를 사용하는 것과 동일하지만 "\ r"뒤에 문자가 없으면 "\ r"앞의 문자를 덮어 씁니다. 문자를 덮어 쓰지 않습니다.
\\ "\"자체를 삽입하는 것을 의미합니다.

작동 예
여기에 사진 설명 삽입

1.2 계산 방법

쉘 스크립트에는 4 가지 계산 방법이 있습니다.

1. i=$(expr 12 \* 5)
2. i=$((12*5))
3. i=$[12*5]
4. let i= 12*5

i++相当于i=$[$i+1]
i--相当于i=$[$i-1]
i+=2相当于i=$[$i+2]

두 개의 루프 문

2.1 for 루프

for 루프 문을 사용할 때 변수와 가능한 값 목록을 지정하고 변수 값이 다 떨어지고 루프를 완전히 종료 할 때까지 각 다른 값에 대해 동일한 명령 시퀀스를 반복적으로 실행해야합니다. 여기서 값 목록은 동일한 속성을 가진 여러 개체를 포함하는 for 문의 실행 조건으로, 미리 지정해야합니다.

2.1.1 for 루프 형식

여기에 사진 설명 삽입

for 变量名 in 取值列表 
do
	命令序列
done

예 : 사용자 추가 및 사용자 삭제

#!/bin/bash添加用户
ULIST=$(cat /root/user.txt)
for UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME &> /dev/null	//把输出信息丢弃
done
#!/bin/bash删除用户
$ULIST=$(cat /root/user.txt)
for UNAME in $ULIST
do
userdel -r $UNAME
[$? -eq 0] && [echo "已删除用户$UNAME"]
done

2.1.2 루프 인터럽트 (중단, 계속)

기본적으로 break는 단일 루프에서 점프하고 break 2는 두 루프에서 점프하는 식으로 break n은 n 루프에서 점프합니다.
continue는 루프에서 명령을 종료하지만 전체 루프를 완전히 종료하지는 않습니다.

2.1.3 for 루프의 세 가지 방법

方法1
[root@localhost ~]#for i in {1..10};do echo $i;done		//按序输出1到10
[root@localhost ~]#for i in {1..10..2};do echo $i;done		//输出1到10,步长为2

方法2
[root@localhost ~]#for i in $(seq 1 10);do echo $i;done		//按序输出1到10
[root@localhost ~]#for i in $(seq 1  2 10);do echo $i;done		//输出1到10,步长为2

方法3
[root@localhost ~]#for ((i=1;i<=10;i++));do echo $i;done

2.2 while 루프

여기에 사진 설명 삽입

while 条件测试操作
do
	命令序列
done

예 : 상품 가격 추측

PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "good's price between 0-999,how much?"
while true
do
	read -p "please input the price you guessed:" INT
	let TIMES++
if [ $INT -eq $PRICE ];then
	echo "You're right.The price is $PRICE"
	echo "You have guessed $TIMES times."
	exit 0
elif [ $INT -gt $PRICE ];then
	echo "Too high!"
else echo "Too low!"
fi
done

2.3 until 루프

특정 조건을 반복 테스트하고 조건이 성립되지 않는 한 반복 실행
여기에 사진 설명 삽입

until 条件测试操作
do
	命令序列
done

예 : 1에서 누적

#!/bin/bash
read -p "从1加到几?" num
i=0;s=0
until [ $i -eq $num ]
do
	let "i++";let "s=$s+$i"
done
echo "sum(1...$num)="$s

세 가지 기능

기능 정의

[function] 函数名 ()
{
    
    
	命令序列
	[return x]
}

통화 기능

函数名 [参数1] [参数2]

3.1 함수 반환 값

반환은 함수를 종료하고 종료 값을 반환하는 것을 의미합니다. 스크립트는 ? 변수를 사용 하여 값을 표시 할 수 있습니다 . 사용 원리 : 1 변수가 값을 표시하기 때문에 반환 값을 가져옵니다. 원리 : 1 함수가 종료되면 반환 값을 가져옵니다. ,때문에? 변수 양을 크게 표시 차종이 사용하는 원래의가 있다 : 기능 의 수 접합 받아 반환 에 다시 , 때문에 같은 ? 마지막 명령 실행 종료 상태 변수를 반환
넘어이 종료 상태 코드가 255이어야합니다 256으로 나눌 때 나머지를 취하십시오

db() 
{
    
    
read -p "input:" value
return $[$value * 2]
}
db
echo $?

3.2 재귀 함수

재귀 함수는 자신을 호출하며, 함수를 분석 할 때 함수 호출을 건너 뛰고 부분을 분석 할 수 있습니다.
예 : 환경 변수의 디렉토리 및 실행 파일을 재귀 적으로 트래버스

#!/bin/bash
//递归函数部分
file_list() {
    
    
for f in $1/*		// $1/*表示取值列表,读取PATH下目录
do
        if [ -d $f ];then		//对$f进行判断,-d表示是否为目录
        echo "$2$f"
        file_list "$f" " $2"		//调用函数自身,把$f下的所有目录和文件作为取值列表,再次进行判断

        elif [ -x $f ];then		//对$f进行判断,-x表示是否为可执行文件
        echo "$2$f"		//输出空格接该文件
        fi
done
}
//主程序部分
IFS=$IFS':'		//IFS字段分隔符,默认包含空格,换行,制表符,加入':'对冒号也可以识别并进行分隔
for folder in $PATH
do
  echo "$folder:"
  file_list "$folder" " "		//调用函数,加入位参1,2
done

3.3 함수 라이브러리 생성 및 호출

예 : 더하기, 빼기, 곱하기 및 나누기 함수 라이브러리

创建函数库
[root@localhost ~]#vim myfuncs.sh
jiafa() 
{
    
    
echo $[$1+$2]
}

jianfa()
{
    
    
echo $[$1-$2]
}

chengfa()
{
    
    
echo $[$1*$2]
}

chufa()
{
    
    
if [ $2 -ne 0 ];then
echo $[$1/$2]
else 
echo '$2不能为0'
fi
}

//调用函数库
. myfuncs.sh

value1=10
value2=5
result1=`jiafa $value1 $value2`
result2=`jianfa $value1 $value2`
result3=`chengfa $value1 $value2`
result4=`chufa $value1 $value2`
echo "加法结果为$result1"
echo "减法结果为$result2"
echo "乘法结果为$result3"
echo "除法结果为$result4"

4 개의 for 루프 출력 99 곱셈 테이블, 다이아몬드

4.1 곱셈표

#!/bin/bash
for ((i=1;i<=9;i++))		//外循环控制行数
do
        for ((j=1;j<=i;j++))		//内循环控制列数
        do
                echo -n -e "$i x $j = $((i * j))\t"
        done
        echo -e "\n"
done

여기에 사진 설명 삽입

4.2 다이아몬드

#!/bin/bash
#菱形上半部分
for ((i=9;i>=1;i--))            #控制行数
do
  for ((a=1;a<=$i;a++))         #控制第i行第一段输出
  do
  echo -n " "
  done
  for ((b=9;b>=$i;b--))         #控制第i行第二段输出
  do
  echo -n "*"
  done
  for ((c=8;c>=$i;c--))         #控制第i行第三段输出
  do
  echo -n "*"
  done
  echo ""
done

#菱形下半部分
for ((h=2;h<=9;h++))
do
  for ((d=1;d<=$h;d++))
  do
  echo -n " "
  done
 
  for ((e=9;e>=$h;e--))
  do
  echo -n "*"
  done

  for ((f=8;f>=$h;f--))
  do
  echo -n "*"
  done

  echo ""
done

여기에 사진 설명 삽입

추천

출처blog.csdn.net/cenjeal/article/details/108074560