Πλατφόρμα Σταυρού Ch Shell Προγραμματισμός

Home

Ch Shell (ch) είναι μια γλώσσα C shell και γνήσια C shell, μια εναλλακτική λύση για το MS-DOS στα Windows

Shell προγραμματισμού, με τα σενάρια να είναι αποτελεσματική για να αυτοματοποιήσετε επαναλαμβανόμενες εργασίες, όπως τη διαχείριση του συστήματος, την παλινδρόμηση (regression test, και την ταχεία προτυποποίηση. Η γλώσσα σύνταξης των συμβατικών Windows MS-DOS και Unix κελύφη, όπως το κέλυφος Bourne, C shell και Korn shell είναι δύσκολη. Παρόμοια με συμβολικές μνημονική μορφές χαμηλότερο επίπεδο συνέλευση γλώσσες, ιδιαίτερη σημασία για τις ομάδες του metacharacters σε MS-DOS/Unix κελύφη είναι δύσκολο να θυμόμαστε. Ως εκ τούτου, μεγάλες shell scripts γραμμένα σε αυτά τα MS-DOS/Unix shell γλώσσες προγραμματισμού είναι δύσκολο να διαβαστούν και δύσκολο να αλλάξει και να διατηρήσει. Επιπλέον, η δύναμη αυτών των MS-DOS/Unix shell γλώσσες προγραμματισμού είναι περιορισμένη. Όπως εκατομμύρια σκληρά-να-πρόγραμμα VCRs να αναβοσβήσει 12:00 στα Αμερικανικά σαλόνια, μόνο ένα κλάσμα των δυνατοτήτων αυτών shell γλώσσες προγραμματισμού χρησιμοποιούνται από την πλειοψηφία του MS-DOS/Unix χρήστες. Οι περισσότεροι χρήστες αντιμετωπίζουν αυτά τα MS-DOS/Unix κελύφη ως εντολή διερμηνέων, τους μέρα με την ημέρα προγραμματισμού εργασίες χειρισμού σε C ή σε άλλες συμβατικές γλώσσες προγραμματισμού.

Ch είναι μια ερμηνευτική εφαρμογή του C, όπως το Unix/MS-DOS shell. ch μπορεί επίσης να χρησιμοποιηθεί ως ένα κέλυφος εισόδου, το ίδιο όπως το Unix κελύφη. Ch γεφυρώνει το χάσμα μεταξύ της γλώσσας C και του Unix/MS-DOS shell. Το Unix shell εντολές, όπως το vi, ls, mv, grep, find, awk και sed μπορεί να τρέξει σε Ch σε Windows και Unix, είναι ενσωματωμένα σε Ch εντολή δέσμης ενεργειών. Είναι σχεδιασμένο τόσο για το διαδραστικό εντολή ερμηνεία και shell προγραμματισμού. Ch είναι ένα πραγματικό VHLL για τον προγραμματισμό, ενώ διατηρεί το κέλυφος χαρακτηριστικά όπως η δυνατότητα επεξεργασίας της γραμμής εντολών, καρτέλα ολοκλήρωση, την ιστορία, τα ψευδώνυμα, σωληνώσεις, wildcarding, επανάληψη κ. λπ. Όταν Ch χρησιμοποιείται σε μια ενιαία κατάσταση εντολών, τα περισσότερα χαρακτηριστικά του Ch είναι το ίδιο με το συμβατικό Unix κελύφη, όπως το κέλυφος Bourne, C shell και Korn shell, και το MS-DOS shell των Windows. Ωστόσο, από το Ch είναι ένα υπερσύνολο της C, shell scripts γραμμένα σε C και να επεκταθεί Ch shell χαρακτηριστικά γνωρίσματα προγραμματισμού είναι πολύ πιο ισχυρό, αποτελεσματικό και εύκολο να διατηρήσει.

Λαμβάνω βοήθεια

man unix_command Διαβάστε το εγχειρίδιο για μια εντολή unix_command. εγώ: ‘man ls’ για να δείτε το εγχειρίδιο για “ls”
man C_function_name Διαβάστε το εγχειρίδιο C_function_name. εγώ: ‘man strcpy’ για να δείτε το εγχειρίδιο για το C τη λειτουργία ‘strcpy’

Αρχική σελίδα καταλόγου και μπαλαντέρ

~ Σας σας κατάλογο
~username Αρχική του ονόματος χρήστη
~/subdirectory Αρχική subdirectory κατάλογο στο σου
cd – πηγαίνει πίσω στην προηγούμενη κατάλογο από τον τρέχοντα κατάλογο εργασίας.εγώ.ε: αν είστε σε c:/windows, πάμε να C:/Program Files/Microsoft, τύπος ‘cd -‘ to πάμε πίσω c:/windows.
cd — μεταβαίνει στο προηγούμενο προηγούμενο κατάλογο. εγώ.ε, αν είστε σε /usr, πάμε να /usr/local, στη συνέχεια, πηγαίνετε να /usr/local/bin, τύπος ‘cd –‘ να πάμε πίσω /usr.
cd ~ or cd Πηγαίνει στον κατάλογο το σπίτι σας από τον τρέχοντα κατάλογο εργασίας σας
* Οποιονδήποτε αριθμό χαρακτήρων. εγώ.ε: ‘ls *.ch’ θα απαριθμήσει όλα τα αρχεία που τελειώνουν σε .ch
? Οποιονδήποτε μεμονωμένο χαρακτήρα

Ιστορικό για να δείξει τις προηγούμενες εντολές εκτελούνται

!! Εκ νέου να εκτελέσει την τελευταία εντολή (ή χρησιμοποιήστε τα πλήκτρα συντόμευσης που περιγράφονται παρακάτω)
!number Εκτελέσει μια εντολή από number
!string Εκτελεστεί η τελευταία εντολή αρχίζοντας με string
^old^new Εκτελεστεί η τελευταία εντολή, αντικαθιστώντας old με new
ctrl-p Μετακινηθείτε προς τα πίσω μέσω των προηγούμενων εντολών

Σωλήνες και εξόδου ανακατεύθυνση

command > filename Ανακατεύθυνση εντολή είναι τυποποιημένη παραγωγή για να αντικαταστήσετε το αρχείο ‘filename’.
command >> filename Ανακατεύθυνση εντολή είναι τυποποιημένη παραγωγή για να προσαρτήσετε το αρχείο ‘filename’
ch -r command >filename (in both Windows and Unix)
command >filename 2>&1 (in Unix)
command 1>filename 2>&1 (in Windows)
Ανακατευθύνει την τυπική έξοδο της εντολήςκαι τυπικό σφάλμα στο αρχείο ‘filename’
command < filename Ανακατεύθυνση εντολή standard input για να διαβάσετε από το αρχείο ‘filename’
command1 | command2 Ανακατεύθυνση command1’s πρότυπα παραγωγής για να command2’s κανονική είσοδο
command & Τρέξιμο command στο παρασκήνιο

Ch Shell έναντι C Shell, Bash και Korn Shell

Από την άποψη της shell programming, Ch θα είναι όσο πιο κοντά στο C shell, όσο το δυνατόν, αλλά όχι πιο κοντά. Ch shell είναι μια γνήσια ” C “ shell και φορητό με Windows και Unix, ενώ το C Shell (csh) έχει αρέσει περισσότερο σαν C σε σύγκριση με άλλες γλώσσες όπως php, κλπ, εκτός από το όνομά του. Η σημασιολογία της ιστορίας και με το ψευδώνυμο χαρακτηριστικά Ch είναι παρόμοια με το C-shell. Αλλά η σύνταξη είναι διαφορετικό από το C-shell επειδή Ch είναι ένα υπερσύνολο της C. Παρακάτω πίνακα παρουσιάζεται Η σύνταξη διαφορές μεταξύ Ch shell και C shell, αλλά με την ίδια σημασιολογία.

C Shell Ch Shell
$#argv _argc
$argv[*] strjoin(” “, _argv[1], _argv[2], …, _argv[_argc])
$argv strjoin(” “, _argv[1], _argv[2], …, _argv[_argc])
$* strjoin(” “, _argv[1], _argv[2], …, _argv[_argc])
$argv[1-n] strjoin(” “, _argv[1], _argv[2], …, _argv[n])
$0 _argv[0]
$argv[n] _argv[n]
$1 $2 … $9 _argv[1] _argv[2] … _argv[9]
$argv[$#argv] _argv[_argc]
set prompt = “ch> “ _prompt = “ch> “
set path = (/usr/bin /bin) _path = “/usr/bin /bin”
umask 022 umask(022)
setenv PATH “/usr/bin /bin” putenv(“PATH=/usr/bin /bin”)
echo $PATH printf(“%s\n”, getenv(“PATH”))
echo $PATH echo $(getenv(“PATH”))
echo $PATH echo $PATH
echo ${PATH} echo ${PATH}
echo $path printf(“%s\n”, _path)
echo $path echo $_path
unsetenv PATH remenv(“PATH”)
printenv PATH getenv(“PATH”)
unset path remvar _path
unset path #pragma remvar(_path)
unset i remvar i
unset i #pragma remvar(i)
set i =90 int i = 90
set i =91 i = 91
set hostnam =`hostname` string_t hostnam =`hostname`
set host =`hostname` _host =`hostname`
alias rm “rm -i” alias(“rm”, “rm -i”)
alias rm alias rm
alias rm alias(“rm”)
alias alias
alias alias()
unalias rm unalias rm
unalias rm alias(“rm”, NULL)
alias f “find . -name \!:1 -print” alias(“f”, “find . -name _argv[1] -print”)
alias e “echo \!* \!$ \!#” alias(“e”, “echo _argv[*] _argv[$] _argv[#]”)
eval ls streval(“`ls`”)
eval ls system(“ls”)
eval setenv NAME VALUE streval(“putenv(\”NAME=VALUE\”)”)
/usr/bin/ls * /usr/bin/ls *
./cmd -option ./cmd -option
status _status
ls ~ * ls ~ *
ls > output ls > output
ls | tar -cf tarfile ls | tar -cf tarfile
ls $PATH ls $(getenv(“PATH”))
ls $PATH ls $PATH
ls $path ls $_path
history = 100 _histsize = 100
history history
$cmd $cmd
!l !l
!l -agl !l -agl
!3 13
!-1 !-1
!! !!
vi `grep -l “str1 str2” *.c` vi `grep -l “str1 str2” *.c`
/* use $ inside ` ` */
set filename=”test.txt”
set tmpFilename=$filename
echo `wc -w $tmpFilename`
string_t filename = “test.txt”;
string_t tmpFilename = filename;
echo `wc -w $tmpFilename`;
.cshrc .login .logout .chrc .chlogin .chlogout (in Unix),_chrc (in Windows)
.cshrc .login .logout .chsrc .chslogin .chslogout (in Unix), _chsrc (in Windows)
Bash και Korn Shell Ch Shell
eval $(date “+month=’%B’ mon=’%m’ year=’%Y'”)
echo $month $mon $year
string_t month, mon, year;
streval(`date ‘+month=”%B”, mon=”%m”, year=”%Y”‘`);
echo $month $mon $year
ls /non_exist_directory >junk 2>&1 ls /non_exist_directory >junk 2>&1
export PS1=”\u@\H \W \A >” _prompt=stradd(_user, “@”, _host, ” “, _cwdn, ” “,`date +%k:%M`, ” >”)
Άμεση Περιγραφή bash Prompt ch Prompt
Τρέχοντα κατάλογο eργασίας \w _cwd
το όνομα του αρχείου στον τρέχοντα κατάλογο εργασίας \W _cwdn
Όνομα χρήστη \u _user
Πλήρες όνομα υπολογιστή \H _host
Όνομα κεντρικού υπολογιστή μέχρι την πρώτη ‘.’ \h `hostname -s`
Τρέχουσα ιστορία αριθμό \! _histnum
Ώρα της ημέρας σε 24-ωρη hh:mm \A date +%k:%M

Συντομεύσεις πληκτρολογίου στο Ch shell

Αντιγράψτε και Επικολλήστε (Δύο τρόποι):

  • Χρησιμοποιώντας την Κονσόλα GUI: εαν θέλετε να γίνει αντιγραφή και επικόλληση από το GUI, μπορείτε να εκτελέσετε “consoleαπό το ch shell. σας επιτρέπει να κάνετε αντιγραφή και επικόλληση πατώντας το κουμπί από το GUI.
  • συντόμευση χρησιμοποιώντας το ποντίκι (η λύση αυτή λειτουργεί στην κονσόλα GUI παραπάνω και Ch shell):
    Επισημάνετε το κείμενο που θέλετε να αντιγράψετε: Κλικ κάντε στο κάτω μία φορά, με τον κέρσορα στη μία πλευρά του κειμένου που θέλετε να αντιγράψετε, με το αριστερό κουμπί του ποντικιού. Κρατήστε πατημένο το κουμπί του ποντικιού πατημένο. Στη συνέχεια, σύρετε το δείκτη του ποντικιού σας πάνω από το κείμενο για, μέχρι όλο το κείμενο που θέλετε να αντιγράψετε είναι διαφορετικού χρώματος από το υπόλοιπο κείμενο της σελίδας. Τώρα, αφήστε το κουμπί του ποντικιού. Αν έχετε επισημάνει σωστά, το κείμενο πρέπει να μείνει με διαφορετικό χρώμα.
    Για την Αντιγραφή: Δεξί κλικ με το ποντίκι.
    Για να Επικολλήσετε: Τοποθετήστε το δείκτη του ποντικιού όπου θέλετε να κάνετε επικόλληση, κάντε δεξί κλικ ξανά για να επικολλήσετε.
TAB: αυτόματη καταχώρηση του αρχείου, εντολή ή όνομα καταλόγου από τη θέση του δρομέα.
Το κόλπο για να χειριστεί ένα κενό διάστημα στο όνομα αρχείου ή καταλόγου, όταν έχει πολλαπλές επιλογές, προσθέστε μια διαφυγής ‘\’ πριν από το διάστημα ‘ ‘, στη συνέχεια, πληκτρολογήστε ‘TAB’. εγώ:

   C:/> cd c:/do[TAB]
   Documents/               Documents and Settings/
   C:/> cd c:/Documents\ [TAB]
   C:/> cd "c:/Documents and Settings"/

Πλεονέκτημα Ch shell που εκτελείται “cd [tab]” στο ch shell θα εμφανίσει μια λίστα των καταλόγων για να επιλέξετε από, ενώ άλλα κελύφη όπως το bash (έκδοση 4.1.2) θα εμφανίσει μια λίστα με τα αρχεία (τα οποία δεν είναι απαραίτητα) και καταλόγους.

Ctrl+a: (home) μετακινεί τον δρομέα στην γραμμή έναρξης (ισοδύναμο με το κλειδί Home).
Ctrl+e : (end) μετακινεί τον δρομέα στο τέλος γραμμής (που ισοδυναμεί με το κλειδί End).
Ctrl+p: (previous) υπενθυμίζει την προηγούμενη εντολή (που ισοδυναμεί με το κλειδί Up).
Ctrl+n: (next) υπενθυμίζει την επόμενη εντολή (που ισοδυναμεί με το κλειδί Down)
Ctrl+u : καθαρίζει την γραμμή περιεχόμενο πριν από το δρομέα και το αντιγράφει στο πρόχειρο.
Ctrl+k : καθαρίζει την γραμμή περιεχόμενο μετά το δρομέα, και το αντιγράφει στο πρόχειρο.
Ctrl+w : καθαρίζει τη λέξη πριν από το δρομέα και το αντιγράφει στο πρόχειρο.
Ctrl+y : (yank) προσθέτει το περιεχόμενο πρόχειρο από τη θέση του δρομέα.
Ctrl+d : στέλνει ένα EOF δείκτη, η οποία κλείνει το τρέχον κέλυφος (ισοδύναμο με την εντολή exit), αν δεν υπάρχει κείμενο στην τρέχουσα γραμμή.
Ctrl+c : στέλνει το σήμα SIGINT στην τρέχουσα εργασία, η οποία ματαιώνει και κλείνει.
Ctrl+z (διαθέσιμο στο unix μόνο): στέλνει το σήμα SIGTSTP την τρέχουσα εργασία, η οποία αναστέλλει. Για να εκτελέσετε στο παρασκήνιο μπορεί να μπει bg. Για να το φέρει πίσω από το παρασκήνιο, το προσκήνιο εντολή fg (‘process name or id’) μπορεί να εκδοθεί.

Ch eπεκτάσεις C για Shell ρογραμματισμού και έσμες ενεργειών

Ch εκτείνεται C με τα ακόλουθα χαρακτηριστικά, που το καθιστούν ιδιαίτερα κατάλληλο για τον προγραμματισμό κέλυφος και σταυρό δέσμης ενεργειών πλατφόρμα.

   > hello.c
   Hello, world!
   (execute the famous hello.c program without compilation)
   > int i, *p;
   > p = &i; 
   > *p = 90;
   > printf("i = %d\n", i);
   i = 90
   >if (i == 90) printf("good\n"); else printf("bad\n");
   good
   > int **p2
   > p2 = &p
   > printf("**p2 = %d\n", **p2)
   **p2 = 90
   > ls * > junkfile
   (all file names go to junkfile)
   > i**p
   8100
   > array int a[2][3]
   > a = (array int [2][3])5
   > a
   5 5 5 
   5 5 5
   > 2*transpose(a)
   10 10 
   10 10 
   10 10 
   > which ls
   ls is aliased to ls -F  // if ls is an alias set in ~/[_]chrc
   >
   > int i;
   > for (i=0; i<6;i++) printf("%d\n",i);
    0
    1
    2
    3
    4
    5
   >

 #return to get the calculation result from ch shell
 > 5*9-4+334-(5*9)*2
   285
 >
      string_t s, a[3];
      s = "great string"
      s = stradd("greater ", s)
      strcpy(a[0], s);
      printf("a[0] = %s\n", a[0]);

θα εμφανίσει μεγαλύτερη μεγάλη συμβολοσειρά.

    string_t token, str="dir1 dir2 dir3";
    foreach(token; str) {
       mkdir $token;
    }

Εδώ το έγγραφο και Πλήρη παραγωγή. Το παρόν και το verbatim χαρακτηριστικά εξόδου μπορεί να επιτευχθεί χρησιμοποιώντας το κωδικό χαρακτηριστικό μπλοκ της συνάρτησης fprintf. Το Ch λειτουργία sendApplet() κάτω δημιουργεί ένα C πρόγραμμα.

void sendApplet(char *x, char *y, char *expr) {
fprintf(stdout, “#include\n”);
fprintf(stdout, “int main() {\n”);
fprintf(stdout, ” double x = %s;\n”, x);
fprintf(stdout, ” double y = %s;\n”, y);
fprintf(stdout, ” printf(\”x = %%f, \”, x);\n”);
fprintf(stdout, ” printf(\”y = %%f \\n\”, y);\n”);
fprintf(stdout, ” printf(\”%s = %%f\\n\”, %s);\n”, expr, expr);
fprintf(stdout, “}\n”);
}

Η παραπάνω λειτουργία sendApplet() μπορεί να ξαναγραφεί στην Ch ως εξής. Αν θέλετε να γίνεται η ανακατεύθυνση σε ένα αρχείο, αντί του ‘stdout‘, μπορείτε απλά να ανοίξετε ένα αρχείο και να τα αντικαταστήσετεstdout’ κάτω με το αρχείο σας χειρισμός.
void sendApplet(char *x, char *y, char *expr) {
fprintf stdout << ENDFILE
#include
int main() {
double x = $x;
double y = $y;
printf(“x = %f”, x);
printf(“y = %f\n”, y);
printf(“$expr = %f\n”, $expr);
}
ENDFILE
}

#!/bin/ch char *ch=”SoftIntegration Ch”; float version=2; string_t hostname=`hostname`; switch (hostname) { case “mymachine”: printf(“Hello world\n”); break; case “testmachine”: fprintf stdout << ENDPRINT Welcome to use $ch version $version SoftIntegration, Inc. ENDPRINT echo Ch is cool! I can now use a C program to backup files dump 0ubdsf 80 50000 50000 /dev/nrst0 /dev/sd0a break; default: break; }

Αν θέλετε να αποτρέψετε τη μεταβλητή ή έκφραση αντικατάστασης για το ‘$’, μπορείτε να προηγείται της ‘$’ με ‘\’. το ‘$’ αμετάβλητο, εάν ακολουθείται από ένα κενό, tab, ή στο τέλος της γραμμής.

#!/bin/ch string_t result1; char result2[50]; grep “test” myfile.txt; if ( _status == 0 ) { printf(” ‘test’ is found in myfile.txt\n”); } else { printf(“Cannot find ‘test’ in myfile.txt\n”); } result1=`wc -l /etc/passwd`; echo $result1; strcpy(result2, `wc -l /etc/passwd`); printf(“%s\n”, result2);

Η παραγωγή για result1 και result2 είναι τα ίδια με το παραπάνω πρόγραμμα.

 int main(int argc, char *argv[]);

Ας υποθέσουμε πρόγραμμα cpfile.ch περιέχει τις ακόλουθες δηλώσεις.

    #!/bin/ch
    cp /dir/source/$(_argv[1]) /dir/dest/


Πρόγραμμα cpfile.ch μπορεί να χρησιμοποιηθεί για να αντιγράψετε οποιοδήποτε αρχείο που βρίσκεται στο τηλεφωνικός κατάλογος /dir/source στον κατάλογο /dir/dest. Για παράδειγμα, τις ακόλουθες εντολές

    > cpfile file1
    > cpfile file2

θα αντιγράψετε τα αρχεία file1 και file2 από το τηλεφωνικός κατάλογος /dir/source στον κατάλογο /dir/dest.

Ch Shell διαφορά μεταξύ των Windows και Unix

Ch shell λειτουργεί ελαφρώς διαφορετικά στα Windows και Unix.

   > `date`
   > char *a=`date`; 
   > echo $a
    

Ωστόσο, Ch κέλυφος των Windows δεν υποστηρίζει την ακόλουθη εντολή substituion.

   > echo date

Στο Unix Ch κέλυφος, είναι όλα υποστηρίζονται.

 > ch -r command >filename  (τόσο σε Windows όσο και Unix)  
 > command >filename 2>&1   (στο Unix)  
 > command 1>filename 2>&1   (στο Windows)
Ch shell cygwin ή unix shell των windows MSDOS shell
κατάλογο εργασίας c:/Users/username /c/Users/username c:\Users\username

 

Περισσότερα παραδείγματα

  #include<stdio.h>
  int main () {
    printf("Hello, world!\n");
    echo Ch is cool! I can now use a C program to backup files
    dump 0ubdsf 80 50000 50000 /dev/nrst0 /dev/sd0a
  }

double x;
x = 2.5;
x = streval("2*x")
printf("x = %.2lf\n", x);

Η παραγωγή είναι 5.00.
     #!/bin/ch
     #include <stdio.h>
     char *s;
     int i=0;
     foreach (s;`ls`) {
        i++;
        echo $s;
     }
     printf("the total number of directory and files are %d\n",i);
     s =`which gzip`;
     echo $s;
  #!/bin/ch
  int main() {
    char *s = "pointer to char";
    int i; 
    float f, *p;
    f = 6; 
    p= &f;
    printf("s = %s\n", s);
    printf("*p = %f\n", f);
    /* output from the following statement is "6 6 pointer to char o" */
    echo $f $(*p) $s $(*(s+1));
    pwd
    ls > junk
  }

#!/bin/sh
command argument << EOF
input from the console command line
abcd
EOF

μπορεί να αντιμετωπιστεί στο Ch ως εξής:
#!/bin/ch
#include
FILE *fp;
string_t command_args=”input from the console command line\nabcd”;
fp = popen(“command”, “w”);
fwrite(command_args, strlen(command_args), sizeof(char), fp);
pclose(fp);

#!/bin/ch
#include

string_t dir, file; /* define string type */
foreach (dir; `echo $PATH | tr “:” ” “`) {
foreach (file; `ls $dir`) {
if (access (dir/file, X_OK) ==0 ) {
echo $dir/$file;
}
}
}

#!/bin/ch
#include <sys/stat.h>

struct stat cstat, ostat;
string_t c, o;
foreach (c; `find . -name “*.c”`) {
o=`echo $c | sed ‘s/.c$/.o/’`;
stat(o, &ostat);
stat(c, &cstat);
if (ostat.st_mtime > cstat.st_mtime) {
echo “compiling $c to $o”;
gcc -c -o “$o” “$c”;
}
}

cat file_name | awk “{print \$1}”
awk “{print \$1}” < file_name

Αρχικά στο http://www.softintegration.com/docs/ch/shell/