Avanya Shina

1598859195

Take screenshot using Python

In this tutorial we will learn how Take screenshot using Python with the help of pyautogui library.

To install pyautogui == pip install pyautogui

  • The code is given below

import pyautogui
im = pyautogui.screenshot()
im.save(r"c:\path\to\my\screenshot.png")

#python

What is GEEK

Buddha Community

Take screenshot using Python

How to Bash Read Command

Bash has no built-in function to take the user’s input from the terminal. The read command of Bash is used to take the user’s input from the terminal. This command has different options to take an input from the user in different ways. Multiple inputs can be taken using the single read command. Different ways of using this command in the Bash script are described in this tutorial.

Syntax

read [options] [var1, var2, var3…]

The read command can be used without any argument or option. Many types of options can be used with this command to take the input of the particular data type. It can take more input from the user by defining the multiple variables with this command.

Some Useful Options of the Read Command

Some options of the read command require an additional parameter to use. The most commonly used options of the read command are mentioned in the following:

OptionPurpose
-d <delimiter>It is used to take the input until the delimiter value is provided.
-n <number>It is used to take the input of a particular number of characters from the terminal and stop taking the input earlier based on the delimiter.
-N <number>It is used to take the input of the particular number of characters from the terminal, ignoring the delimiter.
-p <prompt>It is used to print the output of the prompt message before taking the input.
-sIt is used to take the input without an echo. This option is mainly used to take the input for the password input.
-aIt is used to take the input for the indexed array.
-t <time>It is used to set a time limit for taking the input.
-u <file descriptor>It is used to take the input from the file.
-rIt is used to disable the backslashes.

 

Different Examples of the Read Command

The uses of read command with different options are shown in this part of this tutorial.

Example 1: Using Read Command without Any Option and variable

Create a Bash file with the following script that takes the input from the terminal using the read command without any option and variable. If no variable is used with the read command, the input value is stored in the $REPLY variable. The value of this variable is printed later after taking the input.

#!/bin/bash  
#Print the prompt message
echo "Enter your favorite color: "  
#Take the input
read  
#Print the input value
echo "Your favorite color is $REPLY"

Output:

The following output appears if the “Blue” value is taken as an input:

Example 2: Using Read Command with a Variable

Create a Bash file with the following script that takes the input from the terminal using the read command with a variable. The method of taking the single or multiple variables using a read command is shown in this example. The values of all variables are printed later.

#!/bin/bash  
#Print the prompt message
echo "Enter the product name: "  
#Take the input with a single variable
read item

#Print the prompt message
echo "Enter the color variations of the product: "  
#Take three input values in three variables
read color1 color2 color3

#Print the input value
echo "The product name is $item."  
#Print the input values
echo "Available colors are $color1, $color2, and $color3."

Output:

The following output appears after taking a single input first and three inputs later:

Example 3: Using Read Command with -p Option

Create a Bash file with the following script that takes the input from the terminal using the read command with a variable and the -p option. The input value is printed later.

#!/bin/bash  
#Take the input with the prompt message
read -p "Enter the book name: " book
#Print the input value
echo "Book name: $book"

Output:

The following output appears after taking the input:

Example 4: Using Read Command with -s Option

Create a Bash file with the following script that takes the input from the terminal using the read command with a variable and the -s option. The input value of the password will not be displayed for the -s option. The input values are checked later for authentication. A success or failure message is also printed.

#!/bin/bash  
#Take the input with the prompt message
read -p "Enter your email: " email
#Take the secret input with the prompt message
read -sp "Enter your password: " password

#Add newline
echo ""

#Check the email and password for authentication
if [[ $email == "admin@example.com" && $password == "secret" ]]
then
   #Print the success message
   echo "Authenticated."
else
   #Print the failure message
   echo "Not authenticated."
fi

Output:

The following output appears after taking the valid and invalid input values:

Example 5: Using Read Command with -a Option

Create a Bash file with the following script that takes the input from the terminal using the read command with a variable and the -a option. The array values are printed later after taking the input values from the terminal.

#!/bin/bash  
echo "Enter the country names: "  
#Take multiple inputs using an array  
read -a countries

echo "Country names are:"
#Read the array values
for country in ${countries[@]}
do
    echo $country
done

Output:

The following output appears after taking the array values:

Example 6: Using Read Command with -n Option

Create a Bash file with the following script that takes the input from the terminal using the read command with a variable and the -n option.

#!/bin/bash  
#Print the prompt message
echo "Enter the product code: "  
#Take the input of five characters
read -n 5 code
#Add newline
echo ""
#Print the input value
echo "The product code is $code"

Output:

The following output appears if the “78342” value is taken as input:

Example 7: Using Read Command with -t Option

Create a Bash file with the following script that takes the input from the terminal using the read command with a variable and the -t option.

#!/bin/bash  
#Print the prompt message
echo -n "Write the result of 10-6: "  
#Take the input of five characters
read -t 3 answer

#Check the input value
if [[ $answer == "4" ]]
then
   echo "Correct answer."
else
   echo "Incorrect answer."
fi

Output:

The following output appears after taking the correct and incorrect input values:

Conclusion

The uses of some useful options of the read command are explained in this tutorial using multiple examples to know the basic uses of the read command.

Original article source at: https://linuxhint.com/

#bash #command 

Chloe  Butler

Chloe Butler

1667425440

Pdf2gerb: Perl Script Converts PDF Files to Gerber format

pdf2gerb

Perl script converts PDF files to Gerber format

Pdf2Gerb generates Gerber 274X photoplotting and Excellon drill files from PDFs of a PCB. Up to three PDFs are used: the top copper layer, the bottom copper layer (for 2-sided PCBs), and an optional silk screen layer. The PDFs can be created directly from any PDF drawing software, or a PDF print driver can be used to capture the Print output if the drawing software does not directly support output to PDF.

The general workflow is as follows:

  1. Design the PCB using your favorite CAD or drawing software.
  2. Print the top and bottom copper and top silk screen layers to a PDF file.
  3. Run Pdf2Gerb on the PDFs to create Gerber and Excellon files.
  4. Use a Gerber viewer to double-check the output against the original PCB design.
  5. Make adjustments as needed.
  6. Submit the files to a PCB manufacturer.

Please note that Pdf2Gerb does NOT perform DRC (Design Rule Checks), as these will vary according to individual PCB manufacturer conventions and capabilities. Also note that Pdf2Gerb is not perfect, so the output files must always be checked before submitting them. As of version 1.6, Pdf2Gerb supports most PCB elements, such as round and square pads, round holes, traces, SMD pads, ground planes, no-fill areas, and panelization. However, because it interprets the graphical output of a Print function, there are limitations in what it can recognize (or there may be bugs).

See docs/Pdf2Gerb.pdf for install/setup, config, usage, and other info.


pdf2gerb_cfg.pm

#Pdf2Gerb config settings:
#Put this file in same folder/directory as pdf2gerb.pl itself (global settings),
#or copy to another folder/directory with PDFs if you want PCB-specific settings.
#There is only one user of this file, so we don't need a custom package or namespace.
#NOTE: all constants defined in here will be added to main namespace.
#package pdf2gerb_cfg;

use strict; #trap undef vars (easier debug)
use warnings; #other useful info (easier debug)


##############################################################################################
#configurable settings:
#change values here instead of in main pfg2gerb.pl file

use constant WANT_COLORS => ($^O !~ m/Win/); #ANSI colors no worky on Windows? this must be set < first DebugPrint() call

#just a little warning; set realistic expectations:
#DebugPrint("${\(CYAN)}Pdf2Gerb.pl ${\(VERSION)}, $^O O/S\n${\(YELLOW)}${\(BOLD)}${\(ITALIC)}This is EXPERIMENTAL software.  \nGerber files MAY CONTAIN ERRORS.  Please CHECK them before fabrication!${\(RESET)}", 0); #if WANT_DEBUG

use constant METRIC => FALSE; #set to TRUE for metric units (only affect final numbers in output files, not internal arithmetic)
use constant APERTURE_LIMIT => 0; #34; #max #apertures to use; generate warnings if too many apertures are used (0 to not check)
use constant DRILL_FMT => '2.4'; #'2.3'; #'2.4' is the default for PCB fab; change to '2.3' for CNC

use constant WANT_DEBUG => 0; #10; #level of debug wanted; higher == more, lower == less, 0 == none
use constant GERBER_DEBUG => 0; #level of debug to include in Gerber file; DON'T USE FOR FABRICATION
use constant WANT_STREAMS => FALSE; #TRUE; #save decompressed streams to files (for debug)
use constant WANT_ALLINPUT => FALSE; #TRUE; #save entire input stream (for debug ONLY)

#DebugPrint(sprintf("${\(CYAN)}DEBUG: stdout %d, gerber %d, want streams? %d, all input? %d, O/S: $^O, Perl: $]${\(RESET)}\n", WANT_DEBUG, GERBER_DEBUG, WANT_STREAMS, WANT_ALLINPUT), 1);
#DebugPrint(sprintf("max int = %d, min int = %d\n", MAXINT, MININT), 1); 

#define standard trace and pad sizes to reduce scaling or PDF rendering errors:
#This avoids weird aperture settings and replaces them with more standardized values.
#(I'm not sure how photoplotters handle strange sizes).
#Fewer choices here gives more accurate mapping in the final Gerber files.
#units are in inches
use constant TOOL_SIZES => #add more as desired
(
#round or square pads (> 0) and drills (< 0):
    .010, -.001,  #tiny pads for SMD; dummy drill size (too small for practical use, but needed so StandardTool will use this entry)
    .031, -.014,  #used for vias
    .041, -.020,  #smallest non-filled plated hole
    .051, -.025,
    .056, -.029,  #useful for IC pins
    .070, -.033,
    .075, -.040,  #heavier leads
#    .090, -.043,  #NOTE: 600 dpi is not high enough resolution to reliably distinguish between .043" and .046", so choose 1 of the 2 here
    .100, -.046,
    .115, -.052,
    .130, -.061,
    .140, -.067,
    .150, -.079,
    .175, -.088,
    .190, -.093,
    .200, -.100,
    .220, -.110,
    .160, -.125,  #useful for mounting holes
#some additional pad sizes without holes (repeat a previous hole size if you just want the pad size):
    .090, -.040,  #want a .090 pad option, but use dummy hole size
    .065, -.040, #.065 x .065 rect pad
    .035, -.040, #.035 x .065 rect pad
#traces:
    .001,  #too thin for real traces; use only for board outlines
    .006,  #minimum real trace width; mainly used for text
    .008,  #mainly used for mid-sized text, not traces
    .010,  #minimum recommended trace width for low-current signals
    .012,
    .015,  #moderate low-voltage current
    .020,  #heavier trace for power, ground (even if a lighter one is adequate)
    .025,
    .030,  #heavy-current traces; be careful with these ones!
    .040,
    .050,
    .060,
    .080,
    .100,
    .120,
);
#Areas larger than the values below will be filled with parallel lines:
#This cuts down on the number of aperture sizes used.
#Set to 0 to always use an aperture or drill, regardless of size.
use constant { MAX_APERTURE => max((TOOL_SIZES)) + .004, MAX_DRILL => -min((TOOL_SIZES)) + .004 }; #max aperture and drill sizes (plus a little tolerance)
#DebugPrint(sprintf("using %d standard tool sizes: %s, max aper %.3f, max drill %.3f\n", scalar((TOOL_SIZES)), join(", ", (TOOL_SIZES)), MAX_APERTURE, MAX_DRILL), 1);

#NOTE: Compare the PDF to the original CAD file to check the accuracy of the PDF rendering and parsing!
#for example, the CAD software I used generated the following circles for holes:
#CAD hole size:   parsed PDF diameter:      error:
#  .014                .016                +.002
#  .020                .02267              +.00267
#  .025                .026                +.001
#  .029                .03167              +.00267
#  .033                .036                +.003
#  .040                .04267              +.00267
#This was usually ~ .002" - .003" too big compared to the hole as displayed in the CAD software.
#To compensate for PDF rendering errors (either during CAD Print function or PDF parsing logic), adjust the values below as needed.
#units are pixels; for example, a value of 2.4 at 600 dpi = .0004 inch, 2 at 600 dpi = .0033"
use constant
{
    HOLE_ADJUST => -0.004 * 600, #-2.6, #holes seemed to be slightly oversized (by .002" - .004"), so shrink them a little
    RNDPAD_ADJUST => -0.003 * 600, #-2, #-2.4, #round pads seemed to be slightly oversized, so shrink them a little
    SQRPAD_ADJUST => +0.001 * 600, #+.5, #square pads are sometimes too small by .00067, so bump them up a little
    RECTPAD_ADJUST => 0, #(pixels) rectangular pads seem to be okay? (not tested much)
    TRACE_ADJUST => 0, #(pixels) traces seemed to be okay?
    REDUCE_TOLERANCE => .001, #(inches) allow this much variation when reducing circles and rects
};

#Also, my CAD's Print function or the PDF print driver I used was a little off for circles, so define some additional adjustment values here:
#Values are added to X/Y coordinates; units are pixels; for example, a value of 1 at 600 dpi would be ~= .002 inch
use constant
{
    CIRCLE_ADJUST_MINX => 0,
    CIRCLE_ADJUST_MINY => -0.001 * 600, #-1, #circles were a little too high, so nudge them a little lower
    CIRCLE_ADJUST_MAXX => +0.001 * 600, #+1, #circles were a little too far to the left, so nudge them a little to the right
    CIRCLE_ADJUST_MAXY => 0,
    SUBST_CIRCLE_CLIPRECT => FALSE, #generate circle and substitute for clip rects (to compensate for the way some CAD software draws circles)
    WANT_CLIPRECT => TRUE, #FALSE, #AI doesn't need clip rect at all? should be on normally?
    RECT_COMPLETION => FALSE, #TRUE, #fill in 4th side of rect when 3 sides found
};

#allow .012 clearance around pads for solder mask:
#This value effectively adjusts pad sizes in the TOOL_SIZES list above (only for solder mask layers).
use constant SOLDER_MARGIN => +.012; #units are inches

#line join/cap styles:
use constant
{
    CAP_NONE => 0, #butt (none); line is exact length
    CAP_ROUND => 1, #round cap/join; line overhangs by a semi-circle at either end
    CAP_SQUARE => 2, #square cap/join; line overhangs by a half square on either end
    CAP_OVERRIDE => FALSE, #cap style overrides drawing logic
};
    
#number of elements in each shape type:
use constant
{
    RECT_SHAPELEN => 6, #x0, y0, x1, y1, count, "rect" (start, end corners)
    LINE_SHAPELEN => 6, #x0, y0, x1, y1, count, "line" (line seg)
    CURVE_SHAPELEN => 10, #xstart, ystart, x0, y0, x1, y1, xend, yend, count, "curve" (bezier 2 points)
    CIRCLE_SHAPELEN => 5, #x, y, 5, count, "circle" (center + radius)
};
#const my %SHAPELEN =
#Readonly my %SHAPELEN =>
our %SHAPELEN =
(
    rect => RECT_SHAPELEN,
    line => LINE_SHAPELEN,
    curve => CURVE_SHAPELEN,
    circle => CIRCLE_SHAPELEN,
);

#panelization:
#This will repeat the entire body the number of times indicated along the X or Y axes (files grow accordingly).
#Display elements that overhang PCB boundary can be squashed or left as-is (typically text or other silk screen markings).
#Set "overhangs" TRUE to allow overhangs, FALSE to truncate them.
#xpad and ypad allow margins to be added around outer edge of panelized PCB.
use constant PANELIZE => {'x' => 1, 'y' => 1, 'xpad' => 0, 'ypad' => 0, 'overhangs' => TRUE}; #number of times to repeat in X and Y directions

# Set this to 1 if you need TurboCAD support.
#$turboCAD = FALSE; #is this still needed as an option?

#CIRCAD pad generation uses an appropriate aperture, then moves it (stroke) "a little" - we use this to find pads and distinguish them from PCB holes. 
use constant PAD_STROKE => 0.3; #0.0005 * 600; #units are pixels
#convert very short traces to pads or holes:
use constant TRACE_MINLEN => .001; #units are inches
#use constant ALWAYS_XY => TRUE; #FALSE; #force XY even if X or Y doesn't change; NOTE: needs to be TRUE for all pads to show in FlatCAM and ViewPlot
use constant REMOVE_POLARITY => FALSE; #TRUE; #set to remove subtractive (negative) polarity; NOTE: must be FALSE for ground planes

#PDF uses "points", each point = 1/72 inch
#combined with a PDF scale factor of .12, this gives 600 dpi resolution (1/72 * .12 = 600 dpi)
use constant INCHES_PER_POINT => 1/72; #0.0138888889; #multiply point-size by this to get inches

# The precision used when computing a bezier curve. Higher numbers are more precise but slower (and generate larger files).
#$bezierPrecision = 100;
use constant BEZIER_PRECISION => 36; #100; #use const; reduced for faster rendering (mainly used for silk screen and thermal pads)

# Ground planes and silk screen or larger copper rectangles or circles are filled line-by-line using this resolution.
use constant FILL_WIDTH => .01; #fill at most 0.01 inch at a time

# The max number of characters to read into memory
use constant MAX_BYTES => 10 * M; #bumped up to 10 MB, use const

use constant DUP_DRILL1 => TRUE; #FALSE; #kludge: ViewPlot doesn't load drill files that are too small so duplicate first tool

my $runtime = time(); #Time::HiRes::gettimeofday(); #measure my execution time

print STDERR "Loaded config settings from '${\(__FILE__)}'.\n";
1; #last value must be truthful to indicate successful load


#############################################################################################
#junk/experiment:

#use Package::Constants;
#use Exporter qw(import); #https://perldoc.perl.org/Exporter.html

#my $caller = "pdf2gerb::";

#sub cfg
#{
#    my $proto = shift;
#    my $class = ref($proto) || $proto;
#    my $settings =
#    {
#        $WANT_DEBUG => 990, #10; #level of debug wanted; higher == more, lower == less, 0 == none
#    };
#    bless($settings, $class);
#    return $settings;
#}

#use constant HELLO => "hi there2"; #"main::HELLO" => "hi there";
#use constant GOODBYE => 14; #"main::GOODBYE" => 12;

#print STDERR "read cfg file\n";

#our @EXPORT_OK = Package::Constants->list(__PACKAGE__); #https://www.perlmonks.org/?node_id=1072691; NOTE: "_OK" skips short/common names

#print STDERR scalar(@EXPORT_OK) . " consts exported:\n";
#foreach(@EXPORT_OK) { print STDERR "$_\n"; }
#my $val = main::thing("xyz");
#print STDERR "caller gave me $val\n";
#foreach my $arg (@ARGV) { print STDERR "arg $arg\n"; }

Download Details:

Author: swannman
Source Code: https://github.com/swannman/pdf2gerb

License: GPL-3.0 license

#perl 

Oral  Brekke

Oral Brekke

1684376340

How to Use Of Not Equal To The Operator in Bash

Many types of operators exist in Bash to check the equality or inequality of two strings or numbers. The “-ne” and “!=” operators are used to check the inequality of two values in Bash. The single third brackets ([ ]) are used in the “if” condition when the “!=” operator is used to check the inequality. The double third brackets ([[ ]]) are used in the “if” condition when the “-ne” operator is used to check the inequality. The methods of comparing the string and numeric values using these operators are shown in this tutorial.

Using the “!=” Operator

The “!=” operator can be used to check the inequality between two numeric values or two string values. Two uses of this operator are shown in the following examples.

Example 1: Checking the Inequality Between Numbers
Create a Bash file with the following script that takes a number input and check whether the input value is equal to 10 or not using the “!=” operator. The single third brackets ([ ]) are used in the “if” condition here.

#!/bin/bash
#Take a number
echo -n "Enter a number:"
read number

#Use '!=' operator to check the number value
if [ $number != 10 ]; then
    echo "The number is not equal to 10."
else
    echo "The number is equal to 10."
fi

The script is executed twice in the following output. Twelve (12) is taken as input in the first execution and “The number is not equal to 10” is printed. Ten (10) is taken as input in the second execution and “The number is equal to 10” is printed:

Example 2:
Create a Bash file with the following script that takes two string values and check whether the input values are equal or not using the “!=” operator. The single third brackets ([ ]) are used in the “if” condition here.

#!/bin/bash
#Take a number
echo -n "Enter the first string value: "
read str1
echo -n "Enter the second string value: "
read str2

#Use '!=' operator to check the string values
if [ "$str1" != "$str2" ]; then
    echo "The strings are not equal."
else
    echo "The strings are equal."
fi

The script is executed twice in the following output. The “Hello” and “hello” string values are taken as inputs in the first execution and these values are not equal because the string values are compared case-sensitively. In the next execution, the “hello” and “hello” string values are taken as equal inputs:

Using the “-ne” Operator

The “-ne” operator can be used to check the inequality between two numeric values but not can be used to compare the string values. Two uses of this operator to compare the numeric and string values are shown in the following examples.

Example 1:
Create a Bash file with the following script that takes the username as input. Next, the length of the input value is counted after removing the newline(\n) character. Whether the length of the username is equal to 8 or not is checked using the “-ne” operator. The double third brackets ([[ ]]) are used in the “if” condition here.

#!/bin/bash
#Take the username
echo -n "Enter username: "
read username

#Remove newline from the input value
username=`echo $username | tr -d '\n'`
#Count the total character
len=${#username}

#Use the '-ne' operator to check the number value
if [[ $len -ne 8 ]]; then
    echo "Username must be 8 characters long."
else
    echo "Username: $username"
fi

The script is executed twice in the following output. The “admin” is taken as input in the first execution and the “Username must be 8 characters long” is printed. The “durjoy23” is taken as input in the second execution and the “Username: durjoy23” is printed:

Example 2:
Create a Bash file with the following script that takes the username as input. Next, whether the input value is equal to “admin” or not is checked using the “-ne” operator. The double third brackets ([[ ]]) are used in the “if” condition here. The “-ne” operator does not work to compare two string values.

#!/bin/bash
#Take the username and password
echo -n "Enter username: "
read username

#Remove newline from the input value
username=`echo $username | tr -d '\n'`

#Use '-ne' operator to check the string values
if [[ "$username" -ne "admin" ]]; then
    echo "Invalid user."
else
    echo "Valid user."
fi

The script is executed twice in the following output. The “if” condition is returned true in both executions for the valid and invalid outputs which is a “wrong” output:

Conclusion

The method of comparing two values using the “!=” and “-ne” operators are shown in this tutorial using multiple examples to know the uses of these operators properly.

Original article source at: https://linuxhint.com/

#bash #equal #operator 

田辺  桃子

田辺 桃子

1684380190

如何在 Bash 中使用 Of 不等于运算符

Bash 中存在许多类型的运算符来检查两个字符串或数字是否相等。“-ne”和“!=”运算符用于检查 Bash 中两个值的不等性。当使用“!=”运算符检查不等式时,在“if”条件中使用单个第三括号 ([ ])。当使用“-ne”运算符检查不等式时,双三分括号 ([[ ]]) 用于“if”条件。本教程介绍了使用这些运算符比较字符串和数值的方法。

使用“!=”运算符

“!=”运算符可用于检查两个数值或两个字符串值之间的不等性。以下示例显示了此运算符的两种用法。

示例 1:检查数字之间的不相等性
使用以下脚本创建一个 Bash 文件,该文件接受一个数字输入并使用“!=”运算符检查输入值是否等于 10。此处的“if”条件中使用了单个第三括号 ([ ])。

#!/bin/bash
#Take a number
echo -n "Enter a number:"
read number

#Use '!=' operator to check the number value
if [ $number != 10 ]; then
    echo "The number is not equal to 10."
else
    echo "The number is equal to 10."
fi

该脚本在以下输出中执行了两次。第一次执行时将十二(12)作为输入并打印“数字不等于 10”。在第二次执行中将十 (10) 作为输入并打印“The number is equal to 10”:

示例 2:
使用以下脚本创建一个 Bash 文件,该文件接受两个字符串值,并使用“!=”运算符检查输入值是否相等。此处的“if”条件中使用了单个第三括号 ([ ])。

#!/bin/bash
#Take a number
echo -n "Enter the first string value: "
read str1
echo -n "Enter the second string value: "
read str2

#Use '!=' operator to check the string values
if [ "$str1" != "$str2" ]; then
    echo "The strings are not equal."
else
    echo "The strings are equal."
fi

该脚本在以下输出中执行了两次。“Hello”和“hello”字符串值在第一次执行时被作为输入,这些值不相等,因为字符串值是区分大小写进行比较的。在下一次执行中,“hello”和“hello”字符串值被视为相等的输入:

使用“-ne”运算符

“-ne”运算符可用于检查两个数值之间的不等性,但不能用于比较字符串值。以下示例显示了此运算符用于比较数字值和字符串值的两种用法。

示例 1:
使用以下将用户名作为输入的脚本创建 Bash 文件。接下来,在删除换行符(\n)后计算输入值的长度。使用“-ne”运算符检查用户名的长度是否等于 8。双三括号 ([[ ]]) 用于此处的“if”条件。

#!/bin/bash
#Take the username
echo -n "Enter username: "
read username

#Remove newline from the input value
username=`echo $username | tr -d '\n'`
#Count the total character
len=${#username}

#Use the '-ne' operator to check the number value
if [[ $len -ne 8 ]]; then
    echo "Username must be 8 characters long."
else
    echo "Username: $username"
fi

该脚本在以下输出中执行了两次。第一次执行时将“admin”作为输入,打印“Username must be 8 characters long”。在第二次执行时将“durjoy23”作为输入并打印“用户名:durjoy23”:

示例 2:
使用以下将用户名作为输入的脚本创建 Bash 文件。接下来,使用“-ne”运算符检查输入值是否等于“admin”。双三括号 ([[ ]]) 用于此处的“if”条件。“-ne”运算符不能用于比较两个字符串值。

#!/bin/bash
#Take the username and password
echo -n "Enter username: "
read username

#Remove newline from the input value
username=`echo $username | tr -d '\n'`

#Use '-ne' operator to check the string values
if [[ "$username" -ne "admin" ]]; then
    echo "Invalid user."
else
    echo "Valid user."
fi

该脚本在以下输出中执行了两次。“if”条件在有效和无效输出的两次执行中都返回 true,这是“错误”输出:

结论

本教程使用多个示例展示了使用“!=”和“-ne”运算符比较两个值的方法,以正确了解这些运算符的用法。

文章原文出处:https: //linuxhint.com/

#bash #equal #operator 

Как использовать оператор Not Equal To в Bash

В Bash существует множество типов операторов для проверки равенства или неравенства двух строк или чисел. Операторы «-ne» и «!=» используются для проверки неравенства двух значений в Bash. Одиночные третьи скобки ([ ]) используются в условии «если», когда оператор «!=» используется для проверки неравенства. Двойные третьи скобки ([[ ]]) используются в условии «если», когда оператор «-ne» используется для проверки неравенства. В этом руководстве показаны методы сравнения строковых и числовых значений с помощью этих операторов.

Использование оператора «!=»

Оператор «!=» можно использовать для проверки неравенства между двумя числовыми значениями или двумя строковыми значениями. Два варианта использования этого оператора показаны в следующих примерах.

Пример 1. Проверка неравенства между числами
Создайте файл Bash со следующим сценарием, который принимает ввод числа и проверяет, равно ли введенное значение 10 или нет, используя оператор «!=». Здесь в условии «если» используются одинарные третьи скобки ([ ]).

#!/bin/bash
#Take a number
echo -n "Enter a number:"
read number

#Use '!=' operator to check the number value
if [ $number != 10 ]; then
    echo "The number is not equal to 10."
else
    echo "The number is equal to 10."
fi

Сценарий выполняется дважды в следующем выводе. При первом выполнении в качестве входных данных берется двенадцать (12) и печатается «Число не равно 10». Десять (10) берется на вход во втором выполнении и печатается «Число равно 10»:

Пример 2.
Создайте файл Bash со следующим сценарием, который принимает два строковых значения и проверяет, равны ли входные значения или нет, используя оператор «!=». Здесь в условии «если» используются одинарные третьи скобки ([ ]).

#!/bin/bash
#Take a number
echo -n "Enter the first string value: "
read str1
echo -n "Enter the second string value: "
read str2

#Use '!=' operator to check the string values
if [ "$str1" != "$str2" ]; then
    echo "The strings are not equal."
else
    echo "The strings are equal."
fi

Сценарий выполняется дважды в следующем выводе. Строковые значения «Hello» и «hello» принимаются в качестве входных данных при первом выполнении, и эти значения не равны, поскольку строковые значения сравниваются с учетом регистра. В следующем выполнении строковые значения «hello» и «hello» принимаются как равные входные данные:

Использование оператора «-ne»

Оператор «-ne» можно использовать для проверки неравенства между двумя числовыми значениями, но нельзя использовать для сравнения строковых значений. Два варианта использования этого оператора для сравнения числовых и строковых значений показаны в следующих примерах.

Пример 1.
Создайте файл Bash со следующим сценарием, который принимает имя пользователя в качестве входных данных. Затем длина входного значения подсчитывается после удаления символа новой строки (\n). Соответствует ли длина имени пользователя 8 или нет, проверяется с помощью оператора «-ne». Здесь в условии «если» используются двойные третьи скобки ([[ ]]).

#!/bin/bash
#Take the username
echo -n "Enter username: "
read username

#Remove newline from the input value
username=`echo $username | tr -d '\n'`
#Count the total character
len=${#username}

#Use the '-ne' operator to check the number value
if [[ $len -ne 8 ]]; then
    echo "Username must be 8 characters long."
else
    echo "Username: $username"
fi

Сценарий выполняется дважды в следующем выводе. «admin» берется в качестве входных данных при первом выполнении, и печатается «Имя пользователя должно быть длиной 8 символов». «durjoy23» берется в качестве входных данных во втором выполнении, и печатается «Имя пользователя: durjoy23»:

Пример 2.
Создайте файл Bash со следующим сценарием, который принимает имя пользователя в качестве входных данных. Далее с помощью оператора «-ne» проверяется, равно ли входное значение «admin» или нет. Здесь в условии «если» используются двойные третьи скобки ([[ ]]). Оператор «-ne» не работает для сравнения двух строковых значений.

#!/bin/bash
#Take the username and password
echo -n "Enter username: "
read username

#Remove newline from the input value
username=`echo $username | tr -d '\n'`

#Use '-ne' operator to check the string values
if [[ "$username" -ne "admin" ]]; then
    echo "Invalid user."
else
    echo "Valid user."
fi

Сценарий выполняется дважды в следующем выводе. Условие «если» возвращается как истинное в обоих исполнениях для действительных и недопустимых выходных данных, что является «неправильным» выходным сигналом:

Заключение

Метод сравнения двух значений с использованием операторов «!=» и «-ne» показан в этом руководстве с использованием нескольких примеров, чтобы правильно понять использование этих операторов.

Оригинальный источник статьи: https://linuxhint.com/

#bash #equal #operator