Bạn có thể dễ dàng tạo một số ngẫu nhiên tại dấu nhắc bash, sau đó bạn có thể sử dụng số này để đặt số đã nói làm biến. Điều này hữu ích cho mọi việc, từ viết một số loại tập lệnh nhất định đến chạy các cuộc phiêu lưu nhập vai trên máy tính bảng. Cho dù bạn đang viết một chiến dịch D&D hay viết một tiện ích bằng ngôn ngữ bash mạnh mẽ, bạn thường có thể thoát khỏi một dòng mã duy nhất. Đây cũng là một công cụ rất hữu ích khi cố gắng thực hiện một số kiểm tra bảo mật nhất định, nhưng bạn nên nhớ rằng những kẻ bẻ khóa giỏi có thể phá vỡ các trình tạo số đơn giản này. Chúng vẫn hữu ích trong việc tạo một số loại mật khẩu và mã nhất định, điều này có thể giúp đảm bảo an toàn cho mọi thứ.
Có một số cách khác nhau để thực hiện điều này và không phải mọi kỹ thuật đều phù hợp với mọi tình huống, vì vậy chúng tôi đã cố gắng hết sức để xem xét từng cách và thử nghiệm để đảm bảo nó hoạt động. Bạn sẽ cần phải làm việc từ một thiết bị đầu cuối để thực hiện việc này, vì vậy hãy sử dụng Ctrl+Alt+T hoặc Super (Windows)+T để mở một thiết bị đầu cuối đồ họa, bắt đầu một thiết bị đầu cuối bằng cách nhập terminal vào Dash, chọn nó từ menu Ứng dụng hoặc Whisker và Công cụ hệ thống hoặc đi tới một thiết bị đầu cuối ảo một cách nghiêm túc bằng cách sử dụng Ctrl, Alt và phím giữa F1 và F6.
Phương pháp 1:Chọn một byte ngẫu nhiên đầy đủ
Bạn có thể tạo một số ngẫu nhiên từ 1 đến 256 bằng cách chạy lệnh sau trực tiếp từ dấu nhắc bash:
od -An -N1 -tu1 /dev/urandom
Mặc dù đôi khi bạn có thể thấy lệnh này được tham chiếu đến /dev/random thay vì /dev/urandom, nhưng có thể bạn sẽ không muốn chạy theo cách này. Điều này có thể vô tình cướp đi khả năng sử dụng trình tạo hạt giống ngẫu nhiên của các chương trình khác trong quá trình bạn sử dụng nó. Sau khi chạy chương trình và nhận được số, bạn có thể chắc chắn rằng chương trình cũng sẽ hoạt động theo cách này:
ranNum=$(($(od -An -N1 -tu1 /dev/urandom)))
Điều này sẽ đặt biến ranNum thành một số từ 1 đến 256, được chọn tại thời điểm bạn chạy nó. Bạn có thể chạy nó từ dòng lệnh hoặc từ bên trong tập lệnh và nó sẽ hoạt động theo cả hai cách. Hãy nhớ rằng bạn có thể thay thế ranNum bằng bất kỳ tên biến hợp lệ nào.
Phương pháp 2:Đặt biến thành số ngẫu nhiên trong khoảng từ 1 đến bất kỳ
Bạn có thể chạy echo $[RANDOM%40+1] từ dòng lệnh để gửi thẳng một số ngẫu nhiên từ 1 đến 40 tới đầu ra tiêu chuẩn, nhưng bạn cũng có thể thay thế 40 trong lệnh bằng hầu như bất kỳ số nào. Cuối cùng, kiến trúc máy chủ của bạn sẽ hết chữ số hoặc có thể bash sẽ hết, nhưng dù sao thì bạn cũng không cần một con số cao như vậy.
Giả sử bạn muốn tạo một số ngẫu nhiên từ 1 đến 10 cho cấu hình biến của mình. Bạn có thể chạy:
ranNum=$[RANDOM%10+1]
Hãy nhớ rằng bạn có thể thay thế 10 bằng bất kỳ giá trị cao hơn nào bạn muốn. Giá trị này mang tính bao gồm, nghĩa là 10 là số được trả về hợp lệ. Nếu bạn muốn giảm nó đi một, thì chỉ cần tạo giá trị 9 thay vì sử dụng toán học kiểu C hoặc C++ -1. Những điều này không cần thiết khi đặt biến bằng phương pháp này và chúng thực sự sẽ tạo ra kết quả không mong muốn bằng cách cộng hoặc trừ các chữ số.
Phương pháp 3:Chọn một bit ngẫu nhiên
Nếu bạn cần đặt một biến thành một bit ngẫu nhiên bằng 0 hoặc 1, thì bạn có thể sửa đổi mã trước đó như sau:
ranNum=$(($(od -An -N1 -i /dev/urandom) % 2))
Mã này sẽ đặt ranNum thành 1 hoặc 0 tùy thuộc vào việc các số được lấy mẫu từ /dev/urandom tập tin chẵn hoặc lẻ. Điều này có thể hữu ích nếu bạn cần đặt một phương trình có hoặc không đơn giản cho trạng thái này hoặc trạng thái kia.
Nếu số này không đủ ngẫu nhiên cho công việc bạn đang làm thì bạn có thể nhận được số ngẫu nhiên hơn một chút bằng cách gọi đến thư mục /proc/sys/kernel/random với:
ranNum=$((0x$(cut -c1-1 /proc/sys/kernel/random/uuid) % 2))
Tuy nhiên, một lần nữa, điều này sẽ chỉ đặt biến thành 1 hoặc 0, điều này hoàn hảo cho logic nhị phân nhưng không hữu ích trong những trường hợp bạn có thể cần một số dài hơn. Tuy nhiên, bạn có thể sử dụng bất kỳ dòng nào trong số này trong tập lệnh bash nếu bạn có nhu cầu làm như vậy. Tùy chọn thứ hai này thực sự có thể tốt hơn trong trường hợp tùy chọn đầu tiên cũng thất bại
Phương pháp 4:Tạo tập lệnh bash để trả về số ngẫu nhiên
Nếu bạn muốn có một công cụ tiện dụng để tạo số ngẫu nhiên bất kỳ lúc nào thì bạn có thể tạo tập lệnh dòng lệnh để thực hiện việc đó. Điều này không sử dụng gì khác ngoài ngôn ngữ bash tiêu chuẩn mà hầu hết các lời nhắc Linux hiện đại đều có, vì vậy hầu như mọi bản phân phối Linux hiện đại và khá nhiều hệ điều hành dựa trên BSD đều có thể xử lý tốt việc này. Bạn có thể muốn sử dụng cd ~/.local/bin trước khi tiến xa hơn để đảm bảo rằng bạn sẽ có tập lệnh của mình ở nơi mà bạn có thể thực thi nó từ bất cứ đâu.
Nhập nano ngẫu nhiên hoặc vi ngẫu nhiên để bắt đầu, mặc dù bạn có thể sử dụng tên khác cho tập lệnh của mình nếu muốn. Bạn cũng có thể sử dụng trình soạn thảo văn bản khác nếu muốn. Giả sử bạn muốn tạo một cái sẽ trả về 1 hoặc 0 khi gõ vào dòng lệnh. Nhập thông tin sau rồi nhấn Ctrl+O để lưu nếu bạn đang sử dụng nano:
#!/bin/bash ranNum=$(($RANDOM % 2)) echo $ranNum
Nhập Ctrl+X để thoát trình soạn thảo văn bản và khi quay lại dòng lệnh, hãy sử dụng chmod +x ngẫu nhiên để làm cho tập lệnh của bạn có thể sử dụng được. Tất nhiên, bạn có thể sử dụng ranNum=$[RANDOM%10+1], ranNum=$(($(od -An -N1 -tu1 /dev/urandom))) hoặc bất kỳ dòng nào khác thay cho ranNum=$(($RANDOM % 2)) để bạn có thể kiểm soát chính xác loại số mà bạn muốn quay lại. Giả sử bạn muốn chọn một số từ 1 đến 50 một cách thường xuyên. Thay đổi văn bản của tập lệnh bash thành:
#!/bin/bash ranNum=$[RANDOM%50+1] echo $ranNum
Giờ đây, bạn có thể dễ dàng chạy nó từ dòng lệnh bằng cách nhập ngẫu nhiên bất cứ khi nào bạn muốn tạo số ngẫu nhiên.
GIỚI THIỆU TÁC GIẢ
Mũi tên Kevin
Kevin Arrows là một chuyên gia công nghệ giàu kinh nghiệm và hiểu biết với hơn một thập kỷ kinh nghiệm trong ngành. Anh có chứng chỉ Chuyên gia Công nghệ được Chứng nhận của Microsoft (MCTS) và có niềm đam mê sâu sắc trong việc cập nhật những phát triển công nghệ mới nhất. Kevin đã viết nhiều về nhiều chủ đề liên quan đến công nghệ, thể hiện chuyên môn và kiến thức của mình trong các lĩnh vực như phát triển phần mềm, an ninh mạng và điện toán đám mây. Những đóng góp của ông cho lĩnh vực công nghệ đã được các đồng nghiệp công nhận và tôn trọng rộng rãi, đồng thời ông được đánh giá cao nhờ khả năng giải thích các khái niệm kỹ thuật phức tạp một cách rõ ràng và ngắn gọn.