Điểm:0

Mật mã xoay vòng Bash Script

lá cờ pt

Xin chào, tôi cần viết một mật mã xoay vòng tập lệnh bash. Thật không may, bây giờ tôi không thể tiến xa hơn nữa. Tiếp theo, tôi cần sử dụng điều kiện If-Else để chuyển đổi các chữ cái thành số và dịch chuyển cộng 5 theo chữ cái. Ai đó có thể vui lòng giúp tôi làm thế nào để làm điều đó?

Cảm ơn bạn

#!/bin/bash
#ROT=$1
ROT = 5
VĂN BẢN=$2
CRYPT_TEXT=""

tiếng vang $ROT
tiếng vang $TEXT

tiếng vang "được mã hóa: $CRYPT_TEXT"

cho c bằng $(echo $TEXT | sed -e 's/\(.\)/\1\n/g')
làm
  tiếng vang $c
xong
Điểm:6
lá cờ ie

Chuyển đổi sang chữ hoa có thể được thực hiện trong Bash bằng cách sử dụng:

VĂN BẢN="foobar" 
tiếng vang ${TEXT^^}

Một mật mã xoay vòng có thể được thực hiện bằng cách sử dụng tr, ví dụ: rot13:

tiếng vang $TEXT | tr 'A-Za-z' 'N-ZA-Mn-za-m'
# sbbone

rot5 sẽ trông như thế này:

tiếng vang $TEXT | tr 'A-Za-z' 'F-ZA-Ef-za-e'
# kttgfw

Một phần phiên bản không có tr chỉ huy:

#!/bin/bash

VĂN BẢN = "AZ"

for (( i=0; i<${#TEXT}; i++ )); làm
  printf "%s -> %d\n" "${TEXT:$i:1}" \'${TEXT:$i:1}
  printf -v val "%d" \'${TEXT:$i:1}
  đã dịch chuyển=$(($val + 5))
  tiếng vang "đã dịch chuyển: $ đã dịch chuyển"
  printf "\$(printf '%03o' $shifted)\n"

  # A-Z nằm trong khoảng:
  #65-90
  nếu [[ $shifted -gt 90 ]];thì
    # nếu giá trị lớn hơn chữ Z bạn cần trừ 26
    # để 91 trở thành chữ A
    tiếng vang "$ shifted val quá lớn"
    đã sửa=$(( $shifted - 26))
    echo "giá trị ord đã sửa $đã sửa"
    printf "\$(printf '%03o' $đã chỉnh sửa)\n"
  fi
xong

đầu ra sẽ giống như:

Một -> 65
chuyển: 70
F
Z -> 90
dịch chuyển: 95
_
95 val quá lớn
giá trị ord đã sửa 69
e

Tập lệnh chuyển đổi các chữ cái thành mã ASCII tương ứng của nó, thực hiện dịch chuyển và chuyển đổi mã trở lại các chữ cái. Bạn cần đảm bảo rằng nó hoạt động đối với chữ hoa và chữ thường (hoặc chỉ hỗ trợ một trong số chúng). Tôi sẽ để phần còn lại như một bài tập cho độc giả tử tế.

lá cờ pt
vấn đề là. Tôi cần giải quyết nó mà không cần lệnh tr. Chỉ với if và other trong bước tiếp theo.
lá cờ ie
@ joshi1999 Chỉ sử dụng nếu/khác không có nhiều ý nghĩa. Bạn sẽ viết mã như nếu A, sau đó in E. Điều này thực sự không phải là lập trình nhiều. Tôi đã thêm một ví dụ bash về việc lặp lại văn bản.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.